0

浏览 Gayle Laakmann McDowell 所著的“Cracking the coding interview”一书,在位操作一章中,它提出了一个问题:

求(假设数字用 4 位表示)的值:

1011 & (~0 << 2)

现在,~0 = 1 并将其向左移动两次产生 100(= 0100 完成 4 位)。将 1011 与 0100 相加等于 0000。

但是,我的答案是 1000。

4

4 回答 4

8

~0不是 1 而是1111(或0xf)。该~运算符是按位NOT 运算符,而不是逻辑运算符(应该是!)。

因此,当向左移动 2 位时,最后四位是1100。并且1100 & 1011是精确的1000

于 2013-06-16T13:01:21.330 回答
2

~0不等于 1。0将默认为整数,并且 NOT 操作将反转所有位,而不仅仅是第一个。

于 2013-06-16T13:02:06.607 回答
2

~是按位补码运算符。

的值~0应为11114 位。

1011 & (~0 << 2)
= 1011 & ( 1111 << 2)
= 1011 &  1100
= 1000
于 2013-06-16T13:02:31.287 回答
2
1011 & (~0 << 2)
  1. ~0不是 1 而是111120xF16
  2. 向左移动1111两次给出1100(最左边的两个位已被删除并从右边用 0 填充)。
  3. 相加1011 & 1100在对应的位位置为 1 的每个位位置中给出 1,否则为 0。由此得出结果为1000
于 2013-06-16T13:16:32.327 回答