现在的位置: 首页 > 综合 > 正文

关于int型表示范围的有趣发现

2013年10月09日 ⁄ 综合 ⁄ 共 695字 ⁄ 字号 评论关闭

众所周知,在32位系统中,int型变量占4字节,表示范围为(-2^31)~(2^31-1),也即(-2147483648)~(2147483647)。下面直接上代码说明有趣发现是什么:

#include <stdio.h>

int main()
{
    int a1 = 2147483647; // 超出int型所能表示的最大正整数
    int a2 = 2147483648; // 刚好超出int型所能表示的最大正整数
    int a3 = 2147483649; // 超出2个单位
    
    int a4 = 2147483648*2; // 2147483648偶数倍
    int a5 = 2147483648*3; // 2147483648奇数倍
    int a6 = 2147483648*2+3; // 偶数倍 + 3
    int a7 = 2147483648*3+3; // 奇数倍 + 3
    
    printf(" a1..%d\n a2..%d\n a3..%d\n\n a4..%d\n a5..%d\n a6..%d\n a7..%d\n", a1, a2, a3, a4, a5, a6, a7);
    
    return 0;
}


输出:

a1..2147483647
a2..-2147483648
a3..-2147483647

a4..0
a5..-2147483648
a6..3
a7..-2147483645

结果分析: 

2147483647=(011...11),-2147483648=(100...00) 

1. int型的表示形式是一个循环:最大正整数加1就会变成最小负整数,以此类推; 

2.最小负整数-2147483648乘以2,则相当于(100...00)和(100...00)作加运算,进位1但无法表示,故结果为(000..00)也即0。










抱歉!评论已关闭.