一道Java经典面试题 99%都有可能做错

前言

最近在面试中遇到一个关于位运算的题目

如下图
·

请问这个aString打印值是多少
学过位运算我们都知道 9<<4位 用2进制表示就是0000 1001
如果按照我之前的算法就是 0000 10001 向左位运算4 得到 1001 0000
这个时候我们得到的值就是 128+16 =144
拿到144这个值我们再通过java自带的静态方法 转16进制toHexString()
通过进制转换工具我们得出 144 +1 = 145 转换 16进制就是 91
·

说明

这个题目的91答案是错误的!!
当时我也是一脸懵逼 不知道为什么错
最后面试官告诉我答案是120! 但是我就是知道了答案 也不知道是怎么来的
然后我自己编写测试代码 跑了一次这个函数 得到的结果依然是120。
这下我无语了

反向推理

我们知道答案16进制下的120是正确答案
那么16进制120转10进制是多少呢?
1
我们拿到结果是288
这个288 我们继续按照进制转换 用2进制来表示看下是怎样的
二进制:1 0010 0000
256 32
这样计算下来就是256+32=288

二进制:1 0010 0000 左边移动了五位

如此我们可以得到结论

1

上面这个函数 9<<4+1 其实是先算的4+1 再做的位运算

然后去验证这个推理 查了一下位运算和算数运算的优先级关系
得到下图:
1

猜你喜欢

转载自blog.csdn.net/Life_s/article/details/131005944