我写的程序有两个数字,做除法和模运算。
代码是
#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 9999999999999999999999999999999999999999999999
可以得到以下输出18446744073709551615
4294967295
Page = 0
Offset = 18446744073709551615
如果
virtaddr
大于ADDRESS_SPACE
,为什么If语句不起作用?我知道有一个溢出,但是打印变量没有显示任何错误,它们仍然是数字(长的int可以取的最大值)。 最佳答案
18446744073709551615
是-1的无符号版本。virtaddr
是有符号的,但您将其显示为无符号;当然-1将小于任何有效的正数。
关于c - 大数字之间的比较似乎不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10492069/