C语言int型(2字节)数据的值的范围为啥是-2^15~(2^15-1)?

不问是不是,就问为什么。。。C语言标准根本不定各种整形的具体尺寸,何来固定的数值范围?我要是搞个鬼畜的系统,一字节10位,然后定int为8字节,怎么办?===============================实际上,由于int通常使用补码表示负数,这样一来,符号位为0的零值是零,而符号位为1的负数范围不需要表示0,就额外多了一个可用的数。比如以四位为例:0000:00001:10010:20011:30100:40101:50110:60111:71000:-81001:-71010:-61011:-51100:-41101:-31110:-21111:-1
■网友
计算机整数使用补码表示。1. 为什么用补码?因为补码相加的话,加法器的逻辑电路不需要做偏移修正。你可以试一下1+(-1)的原码和补码就明白了。2. 补码的话,对于int16而言,最高位是符号位,后面是15位数据位。因为整数非负的时候补码和原码一致,负数时为按位取反+1。所以最小的非负是16个0,最大的非负是0后面15个1,最大的负数是16个1,最小的负数是1后面15个0。综合以上,所以int16的表示范围是C语言int型(2字节)数据的值的范围为啥是-2^15~(2^15-1)?

■网友
2byte int能最大数是8FFF,也就是 【C语言int型(2字节)数据的值的范围为啥是-2^15~(2^15-1)?】 C语言int型(2字节)数据的值的范围为啥是-2^15~(2^15-1)?

■网友
根本没有的事情。不要连事实都没搞清楚就提问
■网友
补码表示规则要求这样
■网友
10000000 00000000(第一位表示符号)是2字节中最小数,是负数,是10000000 00000000的补码,十进制中是-2∧15;011111111 11111111是最大数,是正数。转换成十进制是2∧15-1。||也可以这样理解0~32767共有32768个数(二进制码以0开头),-1~-32768共有32768个数(二进制码以1开头),这样想强迫症估计能缓解下。
■网友
这种问题,还是要多看书啊。
■网友
因为0也是一个值


    推荐阅读