-3

我想知道一个数字是否是奇数。我想比较 LSB 而不是使用模数。

int main(int argc, char*argv[])
{
    if ( argc >1 ) {
        if ( atoi(argv[1]) & 0x1 == 1 ) 
            printf ("odd num \n");
    }
    return 0;
}


# ./odd 2
# ./odd 3
odd num 
# ./odd 22
# ./odd 23
# ./odd 33
odd num 
# ./odd 43
# ./odd 52
odd num 
# file odd
odd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x56f7eb1e7a35762bd8b786eefb5516a14549fc1f, not stripped
4

1 回答 1

5

您将数字与数字表示混淆了。这个程序的输入是一个像“22”(十进制数字“2”重复两次)这样的数字的表示,而不是像二十二这样的数字(二十一之后的那个)。告诉编译器假装它是一个数字是行不通的。

   if ( *(unsigned int*)argv[1] & 0x1 == 1 )

因为argv[1]是指向字符串的指针,所以告诉编译器假装它是指向无符号整数的指针会给你带来垃圾。

您可能想要atoi(argv[1]),它将表示十进制形式的数字的字符串转换为它表示的数字。

于 2013-01-16T19:47:01.413 回答