注:"^"代表好多次方,例如2^3代表2的3次方即8Q1:为什么byte型的最小值是-2^7(即-128)而不是-2^7+1(即-127)?
我按照2进制换算到10进制的方法应该是:
最高位符号位不算,后面7位应该是:-2^6-2^5-2^4-2^3-2^2-2^1-2^0=(-1)*(2^7-1)/(2-1)=-2^7+1=-127Q2:为什么负数要用补码表示?要得到用byte表示的-8的补码,为什么要先到得到7的源码?
我按照2进制换算到10进制的方法应该是:
最高位符号位不算,后面7位应该是:-2^6-2^5-2^4-2^3-2^2-2^1-2^0=(-1)*(2^7-1)/(2-1)=-2^7+1=-127Q2:为什么负数要用补码表示?要得到用byte表示的-8的补码,为什么要先到得到7的源码?
用补码表示的数,按照定义,最小的就是-128。
如果不看定义,你也可以理解为“-0”表拿去表示-128了,仅仅“+0”用来表示0。
本来一个byte,8个比特,有256种状态,正好-128到+127是256个数,一个状态也没浪费。
按照补码的定义,一个负数M的补码,其二进制表示等同于无符号整数2 ^ N + M,其中N是这种类型的位数。
对于byte的-128而言,N为8,M为-128,2 ^ 8 + (-128) = 128,而无符号数的128正好是:10000000。
从这个角度来数,当无符号数的0~255表示带符号数时,基中0~127仍表示原值,而128~255则表示-128~-1,补码表示中不像原码那样还有个-0。
00000000-11111111;
其次,这些数字都是补码.
所以它是-128 到 127之间的数.