为什么我可以用整数来达到这个数字?

时间:2013-08-23 01:44:04

标签: memory integer

我正在学习C,我在Kernighan& Ritchie的书中读到整数int被包含在一组特定的集合中[-32767; 32767]。我尝试通过编写以下程序来验证此断言,该程序将变量计数从1递增到极限,然后再以负数表示。

#include <stdio.h>

int main(void){
    int count = 1;
    while(count > 0){
        count++;
        printf("%d\n", count);
    }

    return 0;
}

令人惊讶的是我得到了这个输出:

1
......
2147483640
2147483641
2147483642
2147483643
2147483644
2147483645
2147483646
2147483647 -> This is a lot more than 32767?!
-2147483648 

我不明白,为什么我会得到这个输出?我怀疑M. Ritchie犯了一个错误;)

2 个答案:

答案 0 :(得分:2)

您使用的是32位或64位计算机,而您使用的C编译器具有32位整数。在2的补码二进制中,正如您所观察到的那样,最高的正整数将是31个咬,或2^31-12147483647

请注意,这并未违反K&amp; R声称整数值包含范围[-32768; 32767]。

答案 1 :(得分:1)

短裤通常从-32768到32767. 2 ^ 15th - 1是最大的短裤。

Ints通常从-2147483648变为2147483647. 2 ^ 31st -1是最大的int。

基本上,整数是你想象的两倍。