#include "stdio.h"
signed char a= 0x80;
unsigned char b= 0x01;
void main (void)
{
if(b*a>1)
printf("promoted\n");
else if (b*a<1)
printf("why doesnt promotion work?");
while(1);
}
나는 " '승진 예상 한 인쇄 될하지만 서명과 서명되지 않은 int와 데이터 유형과은을로 가질 수 있다면 왜 나던.?. 예상대로 양수, 0x01로로, 예를 들어, 0x80000000에와 b는 음수가, "승진"인쇄됩니다.
PLZ 날 문제가 무엇인지 이해하는 데 도움이!
는
@ 신비로운 나는 너의 대답을 이해하지 못한다. 그것이 int 형으로 확장 된 서명을 받았다고해도, 나는 생각하지 않는다. 그러나 그것이한다고 가정 할 때, 왜 unsigned int로 승격되고, 제품은 + ve 번호가 아닌가? – Dom045
+1 -이 답변은 긴 마일으로 훨씬 좋고/관련이 있습니다 (그래서 삭제했습니다) –
@ Dom045 사양에 그렇게 나와 있기 때문에. 'signed char'와'unsigned char'는 모두'int'보다 낮은 타입입니다. 그래서 그들은 둘 다'int'로 승격 될 것입니다. 'signed int'와'unsigned int'의 경우, 표준은 양쪽 모두가'unsigned int'로 변환되도록 지시합니다. 규칙은 여기에서 찾아 낼 수있다 : https://www.securecoding.cert.org/confluence/display/seccode/INT02-C.+Understand+integer+conversion+rules – Mysticial