因为C语言中short int占2个字节,有16个二进制位,共可表示2^16种状态。因为它用来表示有符号数,而0也要占用一个状态。所以,16位的原码可以表示的数是-32767~+32767,它的0可以表示为二种状态,+0和-0,既浪费了存储资源,又造成了不方便(需要处理后才能判断二个整数量是否真的不相等)。所以一般采用计算机中一般都采用补码形式来表示有符号整数。多出的一个状态按补码的规则正好是-32768。
-(2^16-1)---32767总的状态数远远大于2^16种,所以不能用16位的二进制来表示的。
short int 是16Bit Int
是有号数
2补数取负值 (反相加1) *-1
0x0000(0) == 0xFFFF + 1 =-(0x10000) => 0
0x0001(1) == 0xFFFE + 1 =-(0xFFFF) => -(-1) => 1
0xFFFF(-1) == 0x0000 + 1 =-(0x0001) => -1
-100赋值
100 =>0x0064 =Inv=>0xFF9B
-100==>0xFF9B+1 =0xFF9C ==>65436
首位是要代表正负的 所以。。。。。32767=2^16-1
第一个是符号位,正数是0负数是1.