gpt4 book ai didi

c++ - 这个奇数程序有什么问题吗?

转载 作者:行者123 更新时间:2023-11-30 20:47:37 24 4
gpt4 key购买 nike

我想知道一个数字是否是奇数。我想比较 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

最佳答案

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

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

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

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

关于c++ - 这个奇数程序有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14366517/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com