C语言中 int a = 1 << 31 为什么是最小整形呢

在网上看到一段神奇的代码

func getMinInt {

    return 1 << 31;

}

func getMaxInt {

    return (1 << 31) - 1;

}

然后我用Objective-c 测试了下,代码如下:

C语言中 int a = 1 << 31 为什么是最小整形呢_第1张图片
code

最后得到结果:  - 2147483648 

                           2147483647

我们知道int 一般在目前的编译中是32位的,1<<31 得到的二进制是 10000000 00000000 00000000 00000000,第一位是符号位,1表示负数,但是后面都是0之后,不是-0吗? 其实不然,因为0没有没有正负, 0在计算机中用00000000 00000000 00000000 00000000 来表示,那么10000000 00000000 00000000 00000000有表示什么呢,从上面的结果可以很显然的看到,用来表示int的最小整数 - 2147483648 。

done。

你可能感兴趣的:(C语言中 int a = 1 << 31 为什么是最小整形呢)