如何使用位运算符检查整数是偶数还是奇数
NNNNNNNN |||||||| |||||||+−− 第 0 位,值为1(20) ||||||+−−− 第 1 位,值为2(21) |||||+−−−− 第 2 位,值为4(22) ||||+−−−−− 第 3 位,值为8(23) |||+−−−−−− 第 4 位,值为16(24) ||+−−−−−−− 第 5 位,值为32(25) |+−−−−−−−− 第 6 位,值为64(26) +−−−−−−−−− 第 7 位(最高位),值为128(27)对于无符号数, 值为-128(-27)对于有符号数(二进制补码)
这里只显示了8位,但你可以理解这个规律。
所以你可以通过只观察最低位来判断一个整数是偶数还是奇数:如果它被设置了,那么这个数字就是奇数。如果没有,那么它是偶数。你不关心其他位,因为它们都表示2的倍数,所以它们不能使值成为奇数。
使用您的编程语言中的AND运算符来查看那个位。在C和许多从B(是的,B)语法派生的其他语言中,该操作符为“&”。在BASIC中,通常为“And”。用整数与1进行AND运算(1是仅设置了最低位的数字),如果结果不等于0,则该位已设置。 我故意没有给出代码,不仅因为我不知道您使用的是哪种语言,而且还因为您将问题标记为“作业”。在 C 语言(以及大多数类 C 语言)中
if (number & 1) {
// It's odd
}
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
作为Jim答案的一个注脚。
在C#中,与运算符返回结果数字,不像C语言那样,所以你需要这样写:
if ((number & 1) == 1) {
// It's odd
}
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。
在Java中,您需要使用if((number&1)==1){//then odd}
,因为在Java和类似C#的语言中,int
类型不能被转换为boolean
类型。您必须使用关系运算符返回一个boolean
值,即true
和false
,而不像C和C++等语言将非零值视为true
。
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";
#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;
}
if((num & 1)==0){
//its an even num
}
//otherwise its an odd num
number&1
将返回0或1。例如,在C#中,如果您编写if(8)
,那么8
是否会被评估为true
? - Shahbaz8 & 1
的结果为0。然而,在C语言中,if语句将把0转换为false,任何非零数字转换为true。 - JimmyMcHoover