2012-10-13 2 views
3

숫자의 짝수 또는 홀수 비트가 모두 1로 설정되어 있는지 확인하고 싶습니다. 예 :숫자의 짝수 또는 홀수 '1'비트 확인하기

숫자 42은 이진 코드 101010에서 모두 짝수 비트가 1으로 설정되어 있기 때문에 정확합니다. 숫자 21도 정확합니다().

숫자 69 예 : 1000101은 세 개의 홀수 비트가 1으로 설정되어 있기 때문에 올바르지 않습니다.

^, &, >>, <<과 다른 작업을 시도했지만 이러한 연산자를 사용하여 어떻게 할 수 있는지 잘 모릅니다. 예, 논리 연산자를 사용하여 C에 입력해야합니다.

+0

숫자가 홀수 또는 짝수인지 확인하려면 * 마지막 * 비트만 확인하면됩니다. – meagar

+0

이 작업을 수행하는 목적은 무엇입니까? –

+0

[관련] (http://stackoverflow.com/questions/109023/best-algorithm-to-count-the-number-of-set-bits-in-a-32-bit-integer) –

답변

5

그 숫자는 (x^(x >> 1)) + 1 2. 그리고 y의 힘 속성이 그래서 하나 개의 테스트는 모든 규모의 숫자 일 것이다 ((x^(x >> 1)) + 1) & (x^(x >> 1)) == 0 수 2

y & (y - 1) == 0 경우의 전력이라고합니다.

+0

예, 그게 전부입니다! 고맙습니다. –

+0

그다지 훌륭하지만 별도의 변수 y에'(x^(x >> 1))'을 저장하면 프로그램이 그 표현식의 값을 더 이상 다시 계산할 필요가 없기 때문에 더 좋습니다 –

1

(n)은 n이! = 0 인 동안 계속 될 것이고, 여전히 그 안에 들어 있습니다. 첫 번째 비트가 하나이면 짝수 매개 변수를 반대 (심지어는 홀수로 또는 그 반대로 변경)로 변경하고, 각 반복마다 숫자를 오른쪽으로 1 비트 시프트합니다.

+3

코드를 게시하는 것이 도움이되지 않습니다. 1 ~ 2 줄로 설명하십시오. – zengr

+0

질문 된 질문에 대한 대답이 아닙니다. 숫자의 짝수 또는 홀수가 설정되었는지 확인합니다. 문제는 모든 홀수 번호 비트가 설정되었는지 또는 모든 비트 번호가 설정되었는지 확인하는 것입니다. – Lindydancer

+0

opps 님이 고칠 것입니다. 감사합니다. – roni

3
#include <stdio.h> 

int main(void) 
{ 
    unsigned uu; 

    for (uu=0; uu < 43; uu++) { 
     int res; 
     res = (((uu & 0xAAAAAAAA) == uu) || ((uu & 0x55555555) == uu)); 
     printf("%u: %d\n", uu, res); 
    } 
    return 0; 
} 
+0

사람들이 공백 문자에 대해 의견을 말하기 시작하면 비 공백 문자가 정확해야합니다 (예 : – wildplasser

+0

). 비트 세트가 전혀 없기 때문에 0은 대소 문자로 간주 될 수 있습니다. (하지만 최소한 * wrong * 비트가 설정되지는 않습니다 ;-) 요청에 따라 물론 0을 별도로 제외 할 수 있습니다. – wildplasser