通过Gayle Laakmann McDowell的书“Cracking the coding interview”,在位操作章节中,它发布了一个问题:
找到值(假设数字由4位表示):
1011 & (~0 << 2)
现在,~0 = 1并向左移动两次产生100(= 0100以完成4位)。安定1011与0100等于0000。
然而,我的答案是1000。
答案 0 :(得分:8)
~0
不是1,而是1111
(或0xf
)。 ~
运算符是按位 NOT运算符,而不是逻辑运算符(可能是!
)。
因此,当向左移动2位时,最后4位为1100
。 1100 & 1011
非常1000
。
答案 1 :(得分:2)
~0
不等于1. 0
将默认为整数,NOT操作将反转所有位,而不仅仅是第一位。
答案 2 :(得分:2)
~
是按位补语运算符。
~0
的值应为4位1111
。
1011 & (~0 << 2)
= 1011 & ( 1111 << 2)
= 1011 & 1100
= 1000
答案 3 :(得分:2)
1011 & (~0 << 2)
~0
不是1,而是1111
2 或0xF
16 。1111
向左移动两次会产生1100
(最左边的两个位已经被删除并从右边用0填充)。1011 & 1100
在相应位位置为1的每个位位置给出1,否则为0.这样结果为1000
。