经典javase面试题

好多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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值