1.在计算机中,数值都是以补码的形式存储的。
2.byte的范围为-128到+127.怎么计算的?
byte 为八位,首位为符号位 0为正,1为负
枚举几个在计算机中存储的对照
+127 0111 1111
0 0000 0000
对于负数(补码:取反加1)
值 原码 反码 补码
-127 1111 1111 1000 0000 1000 0001
那么下一位补码应该是1000 0000了,但是它的原码是多少呢?
由补码求反码的过程是:符号为不变,取反加一
对1000 0000 求原码 ,结果是 1 0000 0000 ,已经超过类8位,不能表示了,
而计算机对于负数是这样计算的,
值--> 取绝对值 --> 求反码--> 求补码
-128 1000 0000 0111 1111 1000 0000
所以byte的范围为 -128到+127
3.对于由byte求整数
byte是有符号的,所以可以得到正数和负数两种结果,因为是互补的,
比如 -127和+129在计算机中的表示是相同的, -127+256=129
对于求ip的地址需要取正数,所以要和 1111 1111做与运算,十六进制表示为0xFF ,即可得到整数
public Integer byteTo32Int(byte b){
return new Integer(b&0xFF);
}
由ip的32位二进制转换成 小数点表示的字符串ip
public static String getIpAddress(byte[] rawBytes){
int i=4;
String ipAddress = "";
for (byte raw : rawBytes) {
ipAddress += (raw & 0xFF);
if(--i>0) ipAddress += ".";
}
return ipAddress;
}