我写的程序有两个数字,做除法和模运算。
代码是

#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/

10-11 07:48