一、题目
我们来看一段代码:
public class Test{
public static void main(String[] args){
int i2 = 128;
byte b = (byte) i2;
System.out.println(b);
}
}
这段代码的输出结果是什么呢?我知道byte类型的存储范围是-128~127。上面这段代码我第一次遇到时候,总以为他会强转成byte类型的127,然而我错了。
我们看一下结果:
输出结果竟然是-128?为什么会这样?不可思议。
二、分析
其实之所以会造成这样的结果,其实它涉及到了计算机底层原理二进制。
我们简单通俗的来解决这个问题。
我们想让四字节32位(DWORD)的int类型的128强转成一字节8位(BYTE)的byte类型。
我们打开计算器看看int类型的+128的二进制表示是什么:
我们看一下byte类型的-128的二进制表示:
三、总结
清楚之后我们就能解释下面这个面试题:
四字节(32位)int类型的+128 强转成 一字节(8位)byte类型,就只保留最低的8位,都是 1000 0000
public class Test{
public static void main(String[] args){
int i2 = 128;
byte b = (byte) i2;
System.out.println(b);
}
}
所以输出结果就是:-128