我想知道一个数字是否是奇数。 我想比较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
答案 0 :(得分:5)
您将数字与数字表示混淆。该程序的输入是一个数字的表示,如“22”(十进制数字“2”重复两次),而不是像二十二(二十一之后的那个)的数字。告诉编译器假装它是一个数字是行不通的。
if ( *(unsigned int*)argv[1] & 0x1 == 1 )
由于argv[1]
是一个指向字符串的指针,告诉编译器假装它是一个指向无符号整数的指针会给你带来垃圾。
您可能需要atoi(argv[1])
,它会将表示十进制数字的字符串转换为它所代表的数字。