Как проверить, четное или нечетное целое с помощью побитовых операторов
Как проверить, является ли целое четным или нечетным с помощью побитовых операторов
Ответ 1
В C (и большинстве C-подобных языков)
if (number & 1) {
// It odd
}
Ответ 2
Рассмотрим, что означает "четное" и "нечетное" означает "бит". Поскольку двоичные целочисленные данные хранятся с битами, указывающими кратные 2, бит младшего разряда будет соответствовать 2 0 что, конечно, 1, тогда как все остальные биты будут соответствовать кратным 2 ( 2 1= 2, 2 2= 4 и т.д.). Грамотное искусство 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 complement)
Я показал только 8 бит, но вы поняли.
Итак, вы можете определить, является ли целое четным или нечетным, глядя только на бит младшего разряда: если он установлен, число нечетное. Если нет, это даже. Вы не заботитесь о других битах, потому что все они обозначают кратные 2, и поэтому они не могут сделать значение нечетным.
То, как вы смотрите на этот бит, - это использовать оператор И вашего языка. В C и многих других языках, синтаксически полученных из B (да, B), этот оператор &
. В BASIC обычно это And
. Вы берете свое целое число, и оно с 1 (которое является числом с только бит-битом младшего разряда), и если результат не равен 0, бит был установлен.
Я намеренно не даю код здесь не только потому, что не знаю, на каком языке вы используете, а потому, что вы отметили вопрос "домашнее задание".: -)
Ответ 3
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
Ответ 4
Просто примечание к Джиму.
В С#, в отличие от C, побитовое И возвращает результирующее число, поэтому вы хотите написать:
if ((number & 1) == 1) {
// It odd
}
Ответ 5
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 И 1 дает нам 0, так как самый правый бит каждого четного числа равен 0.
Ответ 6
Вы можете сделать это просто с помощью побитового оператора AND &
.
if(num & 1)
{
//I am odd number.
}
Подробнее читайте здесь Проверка четного с использованием побитового оператора в C
Ответ 7
Также в Java вам нужно будет использовать if((number&1)==1){//then odd}
, потому что на языках Java и С#, таких как int
, не отображается на boolean
. Вам придется использовать реляционные операторы для возврата
a boolean
значение i.e true
и false
в отличие от языков C и С++, которые обрабатывают ненулевое значение как true
.
Ответ 8
#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;
}