用byte举例,一个字节,8个二进制位
1.无符号数表示范围为0----------255
最大为11111111,1*2^7+1*2^6+1*2^5+1*2^4+1*2^3+1*2^2+1*2^1+1*2^0=255
最小为00000000,0*2^7+0*2^6+0*2^5+0*2^4+0*2^3+0*2^2+0*2^1+0*2^0=0
2.有符号数表示范围为-128-----0-----127
有符号数第一位表示符号,0表示正数,1表示负数
最大为01111111,1*2^6+1*2^5+1*2^4+1*2^3+1*2^2+1*2^1+1*2^0=127
以下注意!负数的二进制表示如下:
二进制值(1字节) |
十进制值 |
10000000 |
-128 |
10000001 |
-127 |
10000010 |
-126 |
10000011 |
-125 |
…… |
…… |
11111110 |
-2 |
11111111 |
-1 |
从-1到-128,其二进制的最高位都是1,因为负数最高为为1
然后1000 0000 并没有拿来表示 -0,而1000 0001也不是拿来直观地表示-1。事实上,-1 用1111 1111来表示。
为什么?
-1大还是-128大?
当然是 -1 大。-1是最大的负整数。以此对应,计算机中无论是字符类型,或者是整数类型,也无论这个整数是几个字节。它都用全1来表示 -1。比如一个字节的数值中:1111 1111表示-1,那么,1111 1111 - 1 是什么呢?和现实中的计算结果完全一致。1111 1111 - 1 = 1111 1110,而1111 1110就是-2。这样一直减下去,当减到只剩最高位用于表示符号的1以外,其它低位全为0时,就是最小的负值了,在一字节中,最小的负值是1000 0000,也就是-128。
我们以-1为例,来看看不同字节数的负整数中,如何表达-1这个数:
字节数 |
二进制值 |
十进制值 |
单字节数 |
11111111 |
-1 |
双字节数 |
11111111 11111111 |
-1 |
四字节数 |
11111111 11111111 11111111 11111111 |
-1 |