整型的宽度是一个字,也就是2个字节,16个二进制位,最高一位二进制位用来表示符号(正或负),那么剩下的15位来表示数值。 01111111 11111111是32767,最大的正整数 00000000 00000001是1 00000000 00000000是0 11111111 11111111是-1(不是-32767) 10000000 00000001是-32767(不是-1) 10000000 00000000是-32768(不是-0),最小的负整数 计算机表示数主要从运算方式的一致性来考虑。 比如00000000 00000001表示1很好理解,但是11111111 11111111为什么是-1呢? 按照二进制加法 11111111 11111111 + 00000000 00000001= 1 00000000 00000000 结果超出了整型的宽度,溢出部分被忽略,最后的计算机结果是00000000 00000000 那么换成十进制,?+1=0,所以11111111 11111111表示成十进制就是-1
我的理解是,在模数系统或是计算机世界里,其实一个二进制数本身大小是没有意义的,你说11111111 11111111是-1或是-32768都是可以的。比如,你说现在是3点和-9点都是一样的。重要的事运算过程。不过如果你printf一下11111111 11111111是-1;
我觉得对于计算机或者是编译器来表示十进制负数数都是用补码来表示的。