2016-08-03 3 views
3

나는 아래 코드를 가지고 있으며 왜 printf 내부의 부정이 외부에 부정을하는 것과 다른가요?부정한 printf

char d=0x04; 
printf("Value of d= %X\n",~d); 
d=~d; 
printf("Value of d= %X\n",d); 

결과는 FFFFFFFB 및 FB입니다. 즉, printf 내부에서 표현식이 정수 유형 (기본 승격)으로 변환되므로 4 바이트가 나타납니다.

답변

3

~ 연산자의 연산을 수행하기 전에 승격 한 피연산자의 유형은 int입니다. 즉 ~0x04의 결과는 int의 너비가 32 비트 인 것으로 표시되므로 귀하의 경우 0xFFFFFFFB이됩니다.

0xFFFFFFFB 값이 printf로 전달 된 경우 해당 유형이 이미 있으므로 int으로 승격되지 않으며 인쇄됩니다. 0xFFFFFFFBd이 다시 할당 된 경우

는 구현 정의 된 방식에 charint에서 전환이 이루어진다. 귀하의 경우 결과 값은 0xFB입니다. d이 printf로 전달되면 int으로 승격되고 int으로 승격되면 0xFB의 값이 그대로 유지되어 인쇄됩니다.