development

비트 연산자를 사용하여 정수가 짝수인지 홀수인지 확인하는 방법

big-blog 2020. 12. 13. 10:09
반응형

비트 연산자를 사용하여 정수가 짝수인지 홀수인지 확인하는 방법


비트 연산자를 사용하여 정수가 짝수인지 홀수인지 확인하는 방법


C (및 대부분의 C와 유사한 언어)

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

"짝수"와 "홀수"가 "비트"용어에서 의미하는 바를 고려하십시오. 이진 정수 데이터는 2의 배수를 나타내는 비트와 함께 저장되므로 최하위 비트는 물론 1 인 2 0에 해당 하고 다른 모든 비트는 2의 배수에 해당합니다 (2 1 = 2, 2 2 = 4 등). 무료 ASCII 아트 :

NNNNNNNN
||||||||
||||||| + −− 비트 0, 값 = 1 (2 0 )
|||||| + −−− 비트 1, 값 = 2 (2 1 )
||||| + −−−− 비트 2, 값 = 4 (2 2 )
|||| + −−−−− 비트 3, 값 = 8 (2 3 )
||| + −−−−−− 비트 4, 값 = 16 (2 4 )
|| + −−−−−−− 비트 5, 값 = 32 (2 5 )
| + −−−−−−−− 비트 6, 값 = 64 (2 6 )
+ −−−−−−−−− 비트 7 (최상위 비트), 부호없는 숫자의 경우 값 = 128 (2 7 ),
                 값 = -128 (-2 7 ), 부호있는 숫자 (2의 보수)

여기에 8 비트 만 표시했지만 아이디어를 얻었습니다.

따라서 최하위 비트 만보고 정수가 짝수인지 홀수인지 알 수 있습니다. 설정된 경우 숫자는 홀수입니다. 그렇지 않다면 짝수입니다. 다른 비트는 모두 2의 배수를 나타내므로 값을 홀수로 만들 수 없으므로 다른 비트는 신경 쓰지 않습니다.

방법 당신이 비트를 보면 언어의 AND 연산자를 사용하는 것입니다. C 및 B (예, B)에서 구문 론적으로 파생 된 다른 많은 언어에서 해당 연산자는 &입니다. BASIC에서는 일반적으로 And. 정수와 1 (최하위 비트 세트 만있는 숫자)을 사용하고 결과가 0이 아니면 비트가 설정된 것입니다.

나는 의도적으로있어 하지 실제로, 여기에 코드를 제공뿐만 아니라 당신이 질문을 표시하기 때문에 당신이 사용중인 언어를 알고 있지만하지 않기 때문에 "숙제." :-)


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와 달리 비트 AND가 결과 숫자를 반환하므로 다음과 같이 작성해야합니다.

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 AND 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을 제공합니다.


비트 AND &연산자 를 사용하여 간단하게 수행 할 수 있습니다 .

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

여기에서 더 읽기 -C에서 비트 연산자를 사용하여 짝수 확인


또한 자바에서 당신은 사용해야 할 것입니다 if((number&1)==1){//then odd}때문에이 언어처럼 자바와 C #에서, int에 주조되지 않는다 boolean. boolean을 반환하려면 관계 연산자를 사용해야합니다. true, false0이 아닌 값을 true.


#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;
}

참고URL : https://stackoverflow.com/questions/5700911/how-do-i-check-if-an-integer-is-even-or-odd-using-bitwise-operators

반응형