본문으로 바로가기

[기타] 시프트 연산

category 프로그래밍/기타 2019. 7. 4. 21:57
728x90
반응형

오늘은 쉬프트 연산에 대해 알아보겠습니다.

시프트 연산은 컴퓨터의 비트 연산중의 하나입니다.

이 시프트 연산은 2의 거듭제곱수를 곱셉,나눗셈 연산을 할때 사용합니다.

기호는 <<와 >>을 사용합니다.

예) a<<b, b>>a 

이 연산의 의미는 연산 왼쪽의 숫자를 연산 오른쪽 숫자 비트만큼 좌, 우로 이동하라는 의미입니다.

2진법 숫자 계산이기 때문에 한칸마다 2를 곱하거나 나눕니다.

 

 

 

 

 


C99 표준을 참고하면 계산법이 나오고, 아래와 같습니다.

a<<b = a * 2^b

a>>b = a / 2^b

예를 들어 4<<2를 계산해보겠습니다.

공식으로 해보면 4 * 2^2 = 16입니다.

왜 이렇게되는지 아래에서 자세히 설명드리겠습니다.

4를 2진법으로 나타내면 0000 0100입니다.

여기서 쉬프트 연산에 의해 왼쪽으로 2비트를 이동시킵니다.

0000 0100 -> 0001 0000 이 됩니다.

그러므로 계산해보면 16이 나옵니다.

한개 더 예를 들어보면 16>>2를 계산해보겠습니다.ㅣ

공식으로 해보면 16 / 2^2 = 4입니다.

16을 2진법으로 나타내면 0001 0000입니다.

여기서 쉬프트 연산에 의해 오른쪽으로 2비트를 이동시킵니다.

0001 0000 -> 0000 0100 이 됩니다.

그러므로 계산해보면 4가 나옵니다.

쉬프트 연산을 사용하는 이유는 속도 때문입니다.

 

 

 

 


일반적으로 숫자를 곱하거나 나누게 되는 것보다 비트 연산이기 때문에 속도가 더 빠르게됩니다.

이러한 속도는 간단한 프로그램에서는  느껴지지 않습니다.

그러나 엄청난 규모의 프로그램에서는 이런 속도가 도움이 될 것입니다.

 

오늘 포스팅은 여기까지입니다

728x90
반응형

'프로그래밍 > 기타' 카테고리의 다른 글

[기타] 해시테이블  (0) 2021.04.30
[기타]Tika 라이브러리  (0) 2020.10.26
[기타] 컴파일, 어셈블, 링킹, 인터프리터  (0) 2019.07.06
[기타] 트레버싱  (0) 2019.07.02