다음 코드가 출력되는 이유를 알고 싶습니다.
unsigned short a=10,aa=-1;
if(a>-1)
printf("surprise");
else
printf(" No surprise");
이것은 출력 "Surprise"를 제공합니다.
unsigned int a=10,aa=-1;
if(a>-1)
printf("surprise");
else
printf("No surprise");
이것은 "No Surprise"출력을 제공합니다.
과
unsigned short a=10,aa=-1;
if(a>aa)
printf("surprise");
else
printf("No surprise");
이것은 "No Surprise"출력을 제공합니다.
이 Stack Exchange 질문을 참조하십시오.
unsigned int 및 signed int가있는 C 표현식에서 어떤 유형이 어떤 유형으로 승격됩니까?
AProgrammer의 응답에 전체 규칙이 나열됩니다. 첫 번째 경우에는 네 번째 규칙이 적용됩니다 (-1은 부호있는 정수이며 부호없는 short의 모든 값을 나타낼 수 있으므로 부호없는 short는 부호있는 정수로 승격됩니다). 두 번째 경우에는 세 번째 규칙이 적용됩니다 (부호있는 정수는 부호없는 정수의 모든 값을 나타낼 수 없으므로 부호없는 정수로 변경됨). 세 번째 경우에는 -1이 unsigned short로 변환 된 다음 첫 번째 규칙이 적용됩니다.
일반적으로 비교를 수행하기 전에 모든 변수를 동일한 부호있는 유형 (예상 범위를 유지할만큼 충분히 큼)으로 변환하여 혼동을 피하고 싶습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다