2015-02-02 2 views
4

출력이 "같음" 인 다음 코드를 보았지만이 프로그램을 이해하는 데 어려움이 있습니다. 이 프로그램을 이해하도록 도와주세요.는 C 프로그램의 결과를 설명합니다

int main() 
{ 
    unsigned int x = -1; 
    int y = ~0; 
    if(x == y) 
     printf("same"); 
    else 
     printf("not same"); 
    return 0; 
} 

"동일한 출력"은 어떻게됩니까? 여기에서 일어나는 일에 대해 도와주세요.

+0

에 해당 0'? 설명 해주십시오. – ouah

+0

~은 bitwise NOT –

+0

입니다. -1과 ~ 0의 비트 동등성 외에도 컴파일러에서 ~ 0을 'unsigned int'유형으로 변환하는 "일반적인 산술 변환"을 수행합니다 (예 : [ 여기] (https://msdn.microsoft.com/en-us/library/3t4w2bkb.aspx)). 비교의 결과는 수치가 예를 들어로 변환 된 것과 다를 것이다. 'int64_t'하지만 이것은 c에서 일어나는 것이 아닙니다. 관련된 질문 : [here] (http://stackoverflow.com/q/7544123/509868) – anatolyg

답변

10

부호 INT X = -1 갖는 비트 플래그 (32 비트)

00000000000000000000000000000000 

~ 0의 부정이다

11111111111111111111111111111111 

INT 0 비트 플래그 (32 비트)를 갖는다 0 (비트) (32 비트) : 사이드 참고로

11111111111111111111111111111111 

:

,
unsigned int x = -1; 

은 ~ '의 결과입니다 무엇

unsigned int x = UINT_MAX. 
+2

'# define'은'INT_MAX' ... 아니라'MAX_INT'라고 생각합니다. – abelenky

+0

@Zeta Done. 정확한 비트 수를 정보의 핵심으로 생각하지 않았습니다. 배후의 아이디어는 OP가 비트의 동작을 이해하는 것입니다. 14 비트 또는 32 비트를 넘는 경우의 차이점은 부적합합니다. 그러나, 나는 abelenky의 코멘트가 유용하다는 것을 안다. – MichaelCMS

관련 문제