swcerti   10달 전

아래 코드와 같이 8비트 (unsigned char)인 수의 bit shift 연산을 했을 때

컴파일러 별로 결과가 다르게 나왔습니다. (별도 옵션 없이 컴파일 했습니다)

8bit로 설정했음에도 MinGW만 결과가 다르게 나오는 이유 문의드립니다

MSVC - Visual studio

MinGW - Visual studio code

gcc - ideone.com

doju   10달 전

C/C++의 산술(arithmetic) 연산자들은 피연산자로 int 이상의 자료형만을 받아들이며, 그보다 작은 자료형(char, short 등)이 주어질 경우 계산하기 전에 모두 int로 올리는 과정(integral promotion)을 거칩니다.
따라서 (uint8)137 << (uint8)4의 결과는 uint8 범위에서 계산한 144가 아니라 int 범위에서 계산한 2192가 되며, int 자료형을 %hhu 형식으로 출력하려고 했기 때문에 undefined behavior가 발생합니다.

swcerti   10달 전


@doju type에 유의해야 겠군요. 감사합니다.

댓글을 작성하려면 로그인해야 합니다.