-128到127.共256个数。刚好可以用一个字节(8位)表示出来(2^8=256);
其实,1111 1111表示的是-1,而不是-128;
首先,因为要表示出负数,所以它的最高位是符号位。0表示正数,1表示负数;如:
127是0111 1111这样表示的。
-128是1000 0000这样表示的。
127后面是-128,最大的正数加下来是最小的负数。这就跟钟表一样,12点钟后面是1点中钟一样。
因为它是用补码的编码方式。
(下面的看不懂可以直接跳过,或者百度了解之后再看)
正数的补码就是它的原码,也就是单纯的二进制数。负数的话,看下面例子:
1111 1111这个二进制串,首先它最高位是1,明确他是个负数。
那么其余位是111 1111,按位取反得到:000 0000,再加1就是:000 0001
也就是1,再加上符号位。最终结果是-1
要弄清楚这个,你还要了解几个专业术语,原码,反码和补码几个概念,其实没必要太纠结这个,会用即可
计算机对带符号数的表示有三种方法:原码、反码和补码。
8位原码和反码能够表示数的范围是-127~127。
8位补码能够表示数的范围是 -128~127。
范围是-128~127,那肯定是用补码表示的。 10000000-11111111表示-128到-1, 00000000-01111111表示0-127 补码的1111 1111转换成原码就是1000 0001,也就是-1,补码就是二进制表示负数的一种方法。
引入了补码概念:负数的补码就是对反码加一,而正数不变,正数的原码反码补码是一样的。在补码中用(-128)代替了(-0),所以补码的表示范围为:(-128~0~127)共256个。
注意:(-128)没有相对应的原码和反码,(-128) = (10000000)。
所谓原码就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。