好多java开发人员在面试时经常会遇到一些数据类型转换的题目,乍一看觉得简单可是又有些不确定。。。相信很多人都有这个时候,那么今天我给大家将一个我面试的题,希望和众多程序猿一起分享!以下是代码:
class test{
public static void main(String[] args){
byte by = 150;
System.out.println(by);
}
}
问程序运行后出现什么结果?请帮忙修改代码。
估计好多人都会说肯定不对,而且程序确实有错 。。。。。。因为java程序中整数默认的都是int型,那如果把整数赋值给byte肯定会出现运算精度丢失的问题,相信大家也都知道!有人经过修改后呢 是这样的
byte by = (byte)150;
强转一下不就行了吗?是这样的 但事实最后程序最后的结果是 -106!!!
好了我来讲一下原因!仔细听
150的补码:00000000 00000000 00000000 10010110
现在我们拿了长度为8的一个空间来截取,截取之后的补码:
截取之后的补码:10010110
但是输出语句输出的都是原码的十进制形式,所以需要求出截取之后的原码
截取之后的补码:10010110
反码:10010101
原码:11101010=-106