得到结果是1?为什么?还有int sd=(n&(1<<3))>>3;又会得到什么?请教前辈们,详细点。。
这是在java书上看的
n是一个整型变量,如果以二进制表示的n从右面数第四位是1 ,那么int ds=(n&8)/8;
答案:2 悬赏:0
解决时间 2021-01-04 01:02
- 提问者网友:情系雨樱花
- 2021-01-03 13:21
最佳答案
- 二级知识专家网友:如果这是命
- 2021-01-03 14:49
1、先说int ds = (n & 8) / 8这个
n从右面数第四位是1,二进制也就是xxxx1000这种形式,n&8,就是xxxx1000 & 00001000这样得到的是00001000(除了1所在的第四位其他位都变成0了),即n & 8的得到的就是8,8 / 8结果是1。
2、再说int sd = (n & (1 << 3)) >> 3
(n & (1 << 3)) >> 3 跟(n & 8) / 8完全等价,结果还是1,
因为1<<3就是把二进制1向左移3位,得到的是1000(十进制是8),同上n & 8得到的还是8,最后再将8的二进制向右移3位,即1000向右移3位得到0001,结果就是1。
不论是什么进制的数,其实在计算机中最后都会转成二进制进行操作,有时候我们把乘除操作使用位移来代替,直接对二进制进行操作,更能提升执行速度。
n从右面数第四位是1,二进制也就是xxxx1000这种形式,n&8,就是xxxx1000 & 00001000这样得到的是00001000(除了1所在的第四位其他位都变成0了),即n & 8的得到的就是8,8 / 8结果是1。
2、再说int sd = (n & (1 << 3)) >> 3
(n & (1 << 3)) >> 3 跟(n & 8) / 8完全等价,结果还是1,
因为1<<3就是把二进制1向左移3位,得到的是1000(十进制是8),同上n & 8得到的还是8,最后再将8的二进制向右移3位,即1000向右移3位得到0001,结果就是1。
不论是什么进制的数,其实在计算机中最后都会转成二进制进行操作,有时候我们把乘除操作使用位移来代替,直接对二进制进行操作,更能提升执行速度。
全部回答
- 1楼网友:都不是誰的誰
- 2021-01-03 16:25
额
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯