gpt4 book ai didi

大数字之间的比较似乎不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 06:39:30 24 4
gpt4 key购买 nike

我写的程序接受两个数字并进行除法和模运算。

代码是

#define ADDRESS_SPACE 4294967295
int main (int argc, char *argv[]) {
long int pagesize = atoi(argv[1]), virtaddr = atoi(argv[2]);

if (virtaddr >= ADDRESS_SPACE) {puts("Address is too large"); return 1;}

printf("%lu\n", virtaddr);
printf("%lu\n", ADDRESS_SPACE);
printf("Page = %lu\nOffset = %lu\n", virtaddr/pagesize, virtaddr%pagesize);
return 0;
}

然后执行 ./page 1024 999999999999999999999999999999999999999999999 给出以下输出

18446744073709551615
4294967295
Page = 0
Offset = 18446744073709551615

如果 virtaddr 大于 ADDRESS_SPACE,为什么 if 语句不起作用?我知道有溢出,但打印变量没有显示任何错误,它们仍然是数字(long int 可以采用的最大值)。

最佳答案

因为 atoi 从 ASCII 转换为 ints 而不是 long ints 并且 9999999999999999999999999999999999999999999999 太大了转换为 int

尝试使用 sscanf对于字符串转换,也尝试一个更合理的数字。

关于大数字之间的比较似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10492069/

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