2017-01-28 1 views
0

의 31 비트의 값을 읽는 것은 내 질문은는 32 비트 정수 한 방법의 31 일 비트 (MSB)를 읽기위한 32 비트 정수

int main(int argc, char *argv[]) { 
    int b =0x80005000; 
    if(b&(1<<31)) 
     printf("bit is one\n"); 
    else 
     printf("bit is zero\n"); 
return 0; 
} 

다음과 같이하고,이 작업을 수행하는 다른 최적의 방법이있다 명령어 사이클이 줄어든다.

+0

필요한 마스크를 미리 정의하십시오. –

+0

@LongSmith - 컴파일러가 너무 바보가 아니라고 가정하면 마스크는 미리 정의됩니다. – 4386427

+0

최대 최적화 코드를 컴파일하고 생성 된 코드를 살펴 봤습니까? – 4386427

답변

3

2의 보수 표현에서 숫자가 음수 일 때 MSB가 설정되고 숫자가 음수가 아닐 때 MSB가 설정되므로이 방법도 사용할 수 있습니다. GCC는이 코드를 생성하는 출력과 동일 - 사실

int b = 0x80005000; 
if (b < 0) 
    printf("bit is one\n"); 
else 
    printf("bit is zero\n"); 

, 당신은 쓴 if(b&(1<<31)) 코드 를 들어, GCC는 0으로 비교하고 기호를 확인 어셈블리를 생산한다.

관련 문제