2017-11-29 9 views
-2

다음 코드에서 비트 단위 연산은 8 비트 부호없는 정수에 대해 수행됩니다. 이 예에서 8 비트 부호없는 int에 대해 수행되는 비트 연산

uint8_t i = 10; 
uint8_t j = i>>2; 

i INT는 부호없는 8 비트를 할당 된 값으로 signed int 및 촉진된다. 8 비트 unsigned int로 다시 int로 변환하는 것이 안전합니까? 산술 식에서

+1

중요하지 않다고 생각합니다. 과제는 결과를 자릅니다. yway. 그리고 귀하의 가치와 함께 그것은 문제가되지 않습니다. 하지만 질문에 많은 오타가 있습니다. 편집 할 수 있습니까? –

+3

시프트 연산은 정수 승격의 영향을받습니다. –

+0

당신이 나누기 때문에, 결과는 동일합니다. –

답변

2

는 가능하면 적은 종류 int으로 변환되고, 그렇지 않은 경우에 unsigned int (6.3.1.1p2 참조). 실제로

,

uint8_t i = 10; 
puts(_Generic(i>>2, uint8_t: "u8", int: "int", unsigned int: "uint")); 

해야 2 유형 intusual arithmetic conversions가 있기 때문에 이전의 예에서

uint8_t i = 10, j = 2; 
puts(_Generic(i>>j, uint8_t: "u8", int: "int", unsigned int: "uint")); 

(

iint 승격 넣기 정상적으로 출력 "INT" 적용될 것입니다.)