这道基础面试题看似简单,但是没几个人能做对

一、题目

我们来看一段代码:

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

猜你喜欢

转载自blog.csdn.net/weixin_46594796/article/details/108400153
今日推荐