Bitshift and integer promotion?과 비슷한 질문에 왼쪽 비트 시프트를 사용할 때 정수 승격에 대한 질문이 있습니다. 이 경우연산자로 정수 승격 <<
unsigned int test(void)
{
unsigned char value8;
unsigned int result;
value8 = 0x12;
result = value8 << 8;
return result;
}
는 value8 먼저 unsiged INT를 촉진하거나 특정 구현 될 것인가?
6.5.7 비트 시프트 연산자 ... 3 Sematics을 ...
정수 프로모션 피연산자의 각각에 수행된다. 결과 유형은 승격 된 왼쪽 피연산자의 유형입니다. 입니다. 오른쪽 피연산자의 값이 음수이거나 승격 된 왼쪽 피연산자의 너비보다 크거나 같은 인 경우 동작은 정의되지 않습니다.
"정수 승격은 각 피연산자에 대해 수행됩니다.",하지만 여기에 프로모션 규칙은 무엇입니까?
나는 그것이 convert to int if lesser rank than int
이어야한다고 가정하지만, 그것을 찾을 수 없습니다.
하나의 컴파일러 (Renesas nc30wa)가 int로 승격되지 않으므로 필자의 질문에 항상 결과가 0입니다.
이 플랫폼에서 char는 8 비트 폭이며 int 16 비트입니다.
value8이 승격되지 않으면 컴파일러 버그입니다. –
Excactly 그것이 질문입니까, 버그입니까 구현입니까? – jeb
@jeb 내 대답에 편집을 참조하십시오. 일부 컴파일러는 기본적으로 정수 판촉을 비활성화하고 컴파일러 설명서에 문서화합니다. 컴파일러 설명서에서 ISO 적합성을 찾아야합니다. – ouah