Java:i - ((i >>> 1) & 0x55555555)该如何理解呢?
答案:4 悬赏:10 手机版
解决时间 2021-02-25 22:10
- 提问者网友:送舟行
- 2021-02-25 11:21
Java:i - ((i >>> 1) & 0x55555555)该如何理解呢?
最佳答案
- 五星知识达人网友:掌灯师
- 2021-02-25 12:02
>>> 无符号右移,高位补0
>>>1是右移1位,比如0101>>>1=0010
& 与操作 比如1000&0111=0000 1111&1100=1100
0x55555555 十六进制数,是01010101010101010101010101010101
>>>1是右移1位,比如0101>>>1=0010
& 与操作 比如1000&0111=0000 1111&1100=1100
0x55555555 十六进制数,是01010101010101010101010101010101
全部回答
- 1楼网友:零点过十分
- 2021-02-25 14:29
>>>是位运算,i的二进制右移1位
- 2楼网友:零点过十分
- 2021-02-25 13:49
先了解以下几点:
1.bitCount得到的是一个整形参数。
2.>>>是位运算符,代表向右移相应位数,它和>>的区别在于它是带符号的右移(正负)。
3.&是位与运算符,当两个二进制的数进行&运算时,若相同位数都为1则结果为1,否则为0。
再来看这行语句:
0x55555555是16进制表示,换算成二进制为1010101010101010101010101010101,
以i=2为例,2的二进制为10,10向右移1位=1,高位补0=0000000000000000000000000000001,
两个值进行&运算还是=1,转十进制也是1,然后i=i-1=>i=2-1=1,就是这样
1.bitCount得到的是一个整形参数。
2.>>>是位运算符,代表向右移相应位数,它和>>的区别在于它是带符号的右移(正负)。
3.&是位与运算符,当两个二进制的数进行&运算时,若相同位数都为1则结果为1,否则为0。
再来看这行语句:
0x55555555是16进制表示,换算成二进制为1010101010101010101010101010101,
以i=2为例,2的二进制为10,10向右移1位=1,高位补0=0000000000000000000000000000001,
两个值进行&运算还是=1,转十进制也是1,然后i=i-1=>i=2-1=1,就是这样
- 3楼网友:有你哪都是故乡
- 2021-02-25 13:21
这个意思就是
a). i>>>1 就是 i 右移一位(二进制下运算),也就是说如果i是偶数就是i/2,如果i是奇数就是(i-1)/2,比如 8>>>2 = 2, 5>>>1 = 2
b). 0x55555555这个是16进制表示法,你可以自己化为二进制(就是每一位16进制转出4位2进制)
c). 这个&运算,对于这两个整数来说就是拿他们的2进制进行位运算,比如数5 & 3 = 1,因为5表达成2进制就是0101,3表达成二进制是0011,0101&0011 = 0001
a). i>>>1 就是 i 右移一位(二进制下运算),也就是说如果i是偶数就是i/2,如果i是奇数就是(i-1)/2,比如 8>>>2 = 2, 5>>>1 = 2
b). 0x55555555这个是16进制表示法,你可以自己化为二进制(就是每一位16进制转出4位2进制)
c). 这个&运算,对于这两个整数来说就是拿他们的2进制进行位运算,比如数5 & 3 = 1,因为5表达成2进制就是0101,3表达成二进制是0011,0101&0011 = 0001
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯