2013-08-22 1 views
2

비트 시프트가 자동으로 피연산자를 int로 바꾸는 어딘가를 읽었습니다. 그러나 그 진술이 "피연산자가 불평등 한 유형이라면"으로 규정되어야하는지 확실하지 않습니다.비트 쉬프트는 자동으로 문자를 int로 승격합니까?

char one = 1, bitsInType = 8; 
one << (bitsInType - one); 

두 번째 줄의 기본 결과는 int 또는 char이됩니까?

+0

@ MarkRansom : 좋은 복제본이라고 생각하지 않습니다. 이 질문은 일반적인 산술 변환이 수행되지 않는다는 사실을 다룹니다. 이 질문은 정수 승격이 수행된다는 사실을 다룹니다. –

답변

2

정상적인 C 구현에서는 결과 유형이 int입니다.

Per C 2011 (N1570) 6.5.7, "정수 승격은 각 피연산자에 대해 수행됩니다. 결과 유형은 승격 된 왼쪽 피연산자의 유형입니다. "

6.3.1.1 2에서 정수 승격은 계급이 보다 작거나 같은 정수 유형의 표현식에 대해 수행됩니다 부호없는 int : "int이 원래 유형의 모든 값 (비트 필드의 경우 너비로 제한됨)을 나타낼 수있는 경우 값은 int으로 변환됩니다. 그렇지 않은 경우가 부호 INT로 변환됩니다. "


1이 있었다 토론 다른 스택 오버플로에있는이 기괴한 C 구현 int 같은 폭의 char을 가질 수있는 것 이는 비정상적인 행동으로 이어집니다.

1

C11 표준, 섹션 6.5.7 비트 시프트 연산자는 상태 :

정수 프로모션 피연산자의 각각에 수행된다. 결과 유형은 승격 된 왼쪽 피연산자의 유형입니다. 입니다.

이것은 값이 int으로 변환 된 다음 작업이 수행됨을 의미합니다. 표현식의 결과는 int입니다.