如何使用按位运算符检查整数是偶数还是奇数

bri*_*man 57 c bitwise-operators

如何使用按位运算符检查整数是偶数还是奇数

T.J*_*der 129

考虑"偶数"和"奇数"在"位"术语中的含义.由于二进制整数数据以表示2的倍数的位存储,因此最低位对应于2 0,当然为1,而所有其他位将对应于2的倍数(2 1 = 2,2 2) = 4等).Gratuituous ASCII艺术:

NNNNNNNN
||||||||
|||||||+?? bit 0, value =   1 (20)
||||||+??? bit 1, value =   2 (21)
|||||+???? bit 2, value =   4 (22)
||||+????? bit 3, value =   8 (23)
|||+?????? bit 4, value =  16 (24)
||+??????? bit 5, value =  32 (25)
|+???????? bit 6, value =  64 (26)
+????????? bit 7 (highest order bit), value = 128 (27) for unsigned numbers,
                 value = -128 (-27) for signed numbers (2's complement)

我只在那里显示了8位,但你明白了.

因此,您可以通过仅查看最低位来判断整数是偶数还是奇数:如果已设置,则数字为奇数.如果不是,那就是偶数.你不关心其他位,因为它们都表示2的倍数,所以它们不能使值奇数.

方式,你看该位是通过使用你的语言的AND运算符.在C语言和许多其他语言中,语法派生自B(是的,B),该运算符是&.在BASIC中,它通常是And.取整数,它取1(这是一个只设置最低位的数字),如果结果不等于0,则设置该位.

我故意不在这里给出代码,不仅因为我不知道你正在使用什么语言,而是因为你标记了"家庭作业"这个问题.:-)


Jim*_*ler 78

在C(和大多数类C语言)

if (number & 1) {
  // It's odd 
}
Run Code Online (Sandbox Code Playgroud)


T M*_*T M 20

if (number & 1)
    number is odd
else // (number & 1) == 0
    number is even
Run Code Online (Sandbox Code Playgroud)

例如,让我们取整数25,这是奇数.二进制25是00011001.请注意,最低有效位b0为1.

00011001    
00000001   (00000001 is 1 in binary)
       &
--------
00000001
Run Code Online (Sandbox Code Playgroud)


neo*_*pir 12

只是吉姆回答的一个脚注.

在C#中,与C不同,按位AND返回结果数,因此您需要编写:

if ((number & 1) == 1) {
   // It's odd
}
Run Code Online (Sandbox Code Playgroud)

  • *"在C#中,与C不同,按位AND返回结果数字......"*按位AND也返回C中的结果数.如果没有,那就没用了.事实上,`if`可以在C中的任何整数类型上运行,但在C#中运行不同,而不是按位运算符的结果. (4认同)
  • &运算符在整数上使用时,按定义返回一个整数.因此,"8&1"将给出0.但是,在C中,if语句将0转换为false,将任何非零数字转换为true. (2认同)

Adi*_*oel 8

if(x & 1)                               // '&' is a bit-wise AND operator
    printf("%d is ODD\n", x);
else
    printf("%d is EVEN\n", x);
Run Code Online (Sandbox Code Playgroud)

例子:

    For 9:

      9 ->        1 0 0 1
      1 ->     &  0 0 0 1
      -------------------
      result->    0 0 0 1
Run Code Online (Sandbox Code Playgroud)

所以9 AND 1给出了1,因为每个奇数的最右边是1.

     For 14:

       14 ->      1 1 1 0
       1  ->   &  0 0 0 1
       ------------------
       result->   0 0 0 0
Run Code Online (Sandbox Code Playgroud)

所以14 AND 1给出0,因为每个偶数的最右边是0.