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

res*_*way -3 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
Run Code Online (Sandbox Code Playgroud)

Dav*_*rtz 5

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

   if ( *(unsigned int*)argv[1] & 0x1 == 1 )
Run Code Online (Sandbox Code Playgroud)

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

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