C/C++의 산술(arithmetic) 연산자들은 피연산자로 int
이상의 자료형만을 받아들이며, 그보다 작은 자료형(char
, short
등)이 주어질 경우 계산하기 전에 모두 int
로 올리는 과정(integral promotion)을 거칩니다.
따라서 (uint8)137 << (uint8)4
의 결과는 uint8
범위에서 계산한 144가 아니라 int
범위에서 계산한 2192가 되며, int
자료형을 %hhu
형식으로 출력하려고 했기 때문에 undefined behavior가 발생합니다.
swcerti 10달 전
아래 코드와 같이 8비트 (unsigned char)인 수의 bit shift 연산을 했을 때
컴파일러 별로 결과가 다르게 나왔습니다. (별도 옵션 없이 컴파일 했습니다)
8bit로 설정했음에도 MinGW만 결과가 다르게 나오는 이유 문의드립니다
MSVC - Visual studio
MinGW - Visual studio code
gcc - ideone.com