获得该数字的内部表示的第二位

时间:2015-03-05 07:03:26

标签: c

请解释为什么通过以下操作,我会在i的内部代表中获得存储在其中的第二位数字。

(i & 2) / 2;

4 个答案:

答案 0 :(得分:4)

  1. 执行i & 2除了i中的第二位以外的所有屏蔽。 [1]
  2. 这意味着表达式的计算结果分别为02(二进制0010)。
  3. 2除以01,这实际上是i中第二位的值。

  4. 例如,如果i = 7,即二进制中的0111

    1. i & 2提供0010
    2. 0010的小数为2
    3. 2/2提供1,即0001

    4. [1] &是C中的按位AND。有关按位AND如何工作的说明,请参阅here

答案 1 :(得分:2)

i & 2掩盖了除第二位以外的所有内容。

将其除以2与向下移1位相同。

e.g。

i = 01100010
(i & 2) == (i & 00000010) = 00000010
(i & 2) / 2 == (i & 2) >> 1 = 00000001

答案 2 :(得分:1)

&运算符是按位AND:对于每个位,只有当两个参数的相应位都为1时,结果才为1.由于数字2中的唯一1位是第二低位,按位与2将强制所有其他位为0.如果(i & 2)中的第二位置位,则i的结果为2,否则为0。

除以2只是在设置i的第二位时将结果更改为1而不是2。如果您只关心结果是零还是非零,则没有必要。

答案 3 :(得分:0)

2是二进制的10&是一个按位conjunction。因此,i & 2可以获得i的第二位。除以2与向右移位1相同,得到最后一位的值。

实际上,向右移动会更好,因为它清楚地表明了你的意图。因此,此代码通常如下所示:(i & 0x02) >> 1