这个奇数计划有什么问题吗?

时间:2013-01-16 19:45:37

标签: c++ c

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

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

1 个答案:

答案 0 :(得分:5)

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

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

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

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