我以Java中基本数据类型byte为例。byte的取值范围-128至127.
public static void main(String[] args) { byte a1 = (byte)512;//2的9次方
byte a2 = (byte)513;
byte a3 = (byte)520;//512+8
byte a4 = (byte)640;//512+128
byte a5 = (byte)641;//512+129
byte a6 = (byte)-513;
byte a7 = (byte)-520;
byte a8 = (byte)-641;
System.out.println(a1);//0
System.out.println(a2);//1
System.out.println(a3);//8
System.out.println(a4);//-128
System.out.println(a5);//-127
System.out.println(a6);//-1
System.out.println(a7);//-8
System.out.println(a8);//127
}
谁能从计算机原理的角度来分析为什么会是这个结果,或者推荐一本关于这方面的书籍也行
public static void main(String[] args) { byte a1 = (byte)512;//2的9次方
byte a2 = (byte)513;
byte a3 = (byte)520;//512+8
byte a4 = (byte)640;//512+128
byte a5 = (byte)641;//512+129
byte a6 = (byte)-513;
byte a7 = (byte)-520;
byte a8 = (byte)-641;
System.out.println(a1);//0
System.out.println(a2);//1
System.out.println(a3);//8
System.out.println(a4);//-128
System.out.println(a5);//-127
System.out.println(a6);//-1
System.out.println(a7);//-8
System.out.println(a8);//127
}
谁能从计算机原理的角度来分析为什么会是这个结果,或者推荐一本关于这方面的书籍也行
这一点C#也有很好的支持。你要自己判断是不是溢出了
得写点代码。
第二步:由于强转成byte,因此取出其最低的8位,即:11111000赋值给a7
第三步:补码为11111000对应的十进制数值是:-8
byte是8位的。而将int型强制转化为byte时候是要截取字节的。
你自己把上面的int型转换为二进制看看。然后再换算成十进制看看,和你的结果比比是不是一样。