Подтвердить что ты не робот

Как проверить, является ли целое четным или нечетным с помощью побитовых операторов

Как проверить, четное или нечетное целое с помощью побитовых операторов

4b9b3361

Ответ 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.

Ответ 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;
}