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

时间:2011-04-18 09:29:37

标签: c bitwise-operators

如何使用按位运算符

检查整数是偶数还是奇数

11 个答案:

答案 0 :(得分:123)

考虑“偶数”和“奇数”在“位”术语中的含义。由于二进制整数数据以表示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,则设置该位。

我故意实际上在这里提供代码,不仅因为我不知道你正在使用什么语言,而是因为你标记了“家庭作业”这个问题。 : - )

答案 1 :(得分:76)

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

if (number & 1) {
  // It's odd 
}

答案 2 :(得分:18)

if (number & 1)
    number is odd
else // (number & 1) == 0
    number is even

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

00011001    
00000001   (00000001 is 1 in binary)
       &
--------
00000001

答案 3 :(得分:12)

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

在C#中,与C不同,按位AND返回结果数,所以你想写:

if ((number & 1) == 1) {
   // It's odd
}

答案 4 :(得分:7)

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

示例:

    For 9:

      9 ->        1 0 0 1
      1 ->     &  0 0 0 1
      -------------------
      result->    0 0 0 1

所以9和1给出1,因为每个奇数的最右边是1。

     For 14:

       14 ->      1 1 1 0
       1  ->   &  0 0 0 1
       ------------------
       result->   0 0 0 0

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

答案 5 :(得分:1)

您只需使用按位AND &运算符即可。

if(num & 1)
{
    //I am odd number.
}

在此处阅读更多内容 - Checking even odd using bitwise operator in C

答案 6 :(得分:1)

Check Number is Even or Odd using XOR Operator 

Number = 11 
  1011  - 11 in Binary Format 
^ 0001  - 1 in Binary Format 
  ----
  1010  - 10 in Binary Format 

Number = 14 

  1110  - 14 in Binary Format 
^ 0001  - 1 in Binary Format 
  ----
  1111  - 15 in Binary Format 

AS It can observe XOR Of a number with 1, increments it by 1 if it is 
even, decrements it by 1 if it is odd. 

代码:

if((n^1) == (n+1))
    cout<<"even\n";
else
    cout<<"odd\n";

答案 7 :(得分:0)

同样在Java中,您必须使用if((number&1)==1){//then odd},因为在Java和C#类语言中,int不会转换为boolean。您将不得不使用关系运算符返回 一个boolean值,truefalse,与C和C ++类似的语言不同,它将非零值视为true

答案 8 :(得分:0)

#include <iostream>
#include <algorithm>
#include <vector>

void BitConvert(int num, std::vector<int> &array){
    while (num > 0){
        array.push_back(num % 2);
        num = num / 2;
    }
}

void CheckEven(int num){
    std::vector<int> array;
    BitConvert(num, array);
    if (array[0] == 0)
        std::cout << "Number is even";
    else
        std::cout << "Number is odd";
}

int main(){
    int num;
    std::cout << "Enter a number:";
    std::cin >> num;

    CheckEven(num);
    std::cout << std::endl;

    return 0;
}

答案 9 :(得分:0)

在Java中,

if((num & 1)==0){
//its an even num
}
//otherwise its an odd num

答案 10 :(得分:0)

这是一个老问题,但其他答案忽略了这一点。

除了使用num & 1,您还可以使用num | 1 > num

这是有效的,因为如果一个数字是奇数,结果值将是相同的,因为原始值 num 将以个位开始,但是如果原始值 num 是偶数,位不会被设置,因此将其更改为 1 将使新值增加 1。