본문 바로가기

C,C++/공부 낙서

공부하면서 빠트린 것들 끄적끄적 - 시프트 연산

<< : 왼쪽 시프트 연산자

>> : 오른쪽 시프트 연산자

 

 

 

 

사용 방법

A << B 

 

A의 모든 비트를 B만큼 왼쪽으로 이동시킵니다.

ex) 8 << 4

 

 

 

A >> B

 

A의 모든 비트를 B만큼 오른쪽으로 이동시킵니다.

ex) 8 >> 2

 

 

 

 

결론 

A << B의 연산 결과는 A*(2의 B제곱)이 됩니다.

A >> B의 연산 결과는 A/(2의 B제곱)이 됩니다.

 

유의할 점

코드상에서 덧셈뺄셈 연산은 시프트 연산보다 높은 우선순위를 가집니다.

따라서 괄호 표시를 하는 것을 추천합니다.

ex) 1 << 2 + 3 << 41 << (2 + 3) << 4과 같습니다.

 

 

 

추가 사항

논리 시프트 : 레지스터에 있는 데이터 비트에 대한 이동,

비어있는 비트는 0으로 채워지고 범위를 넘어가는 비트는 사라집니다.

 

산술 시프트 : 레지스터에 있는 데이터 비트가 부호를 가진 경우,

부호비트는 그대로 두고 수의 크기를 나타내는 비트만 이동시킵니다.

 

산술 시프트와 논리 시프트를 구분해야하는 경우는 오른쪽 시프트를 할 때!