如何使用按位运算符
检查整数是偶数还是奇数答案 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
值,true
和false
,与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。