我在这里看到了答案:6
我已经测试了第一个,但在这部分:
x = 29638;
y = 999;
p = 10;
n = 8;
return (x & ((~0 << (p + 1)) | (~(~0 << (p + 1 - n)))))在一篇论文中它给了我一个6,但在程序中它返回28678.
在本部分:
111001111000110
&000100000000111结果,最左边的三位必须类似于x中的1,但按位运算符&说:
如果所有操作数的对应位数为1,则按位数的输出为1。如果操作数的任一位为0,则对应位的结果被求为0。
那么,为什么它返回的数字等于1的3位呢?
发布于 2016-06-10 02:10:16
我们开始,一步一步(使用16位数字)。我们首先:
(x & ((~0 << (p + 1)) | (~(~0 << (p + 1 - n)))))以数字代替(以小数表示):
(29638 & ((~0 << (10 + 1)) | (~(~0 << (10 + 1 - 8)))))加起来的位移位量给出:
(29638 & ((~0 << 11) | (~(~0 << 3))))将数字重写为二进制并应用~0s.
(0111001111000110 & ((1111111111111111 << 1011) | (~(1111111111111111 << 0011))))在完成轮班之后,我们得到:
(0111001111000110 & (1111100000000000 | (~ 1111111111111000)))应用其他按位-不(~):
(0111001111000110 & (1111100000000000 | 0000000000000111))和按位-OR (|):
0111001111000110 & 1111100000000111最后,按位-和(&):
0111000000000110所以我们有二进制0111000000000110,它是2 + 4 + 4096 + 8192 + 16384,也就是28678。
https://stackoverflow.com/questions/37738387
复制相似问题