본문 바로가기

뇌세포덩어리""

쉬프트 연산!!!

사실...일반 연산 부분과 함께 나오기 떄문에 괜시리 무시 당하고..(나만 그런가?)

그냥 알아두면 되겟찌 하고 넘어갔떤 부분이다.....

하지만 요즘 암호학을 보면서 심히 컴퓨터의 성능향상에 눈을 기울이고 있는터라

쪼끔이라도 더 빠르다면 분명 결과는 나쁘지 않기에!!

쬐끔 끄적거리면서 쉬프트 연산을 뒤져 보앗따~

<< : 무조건 0으로 채운다.

>> : 맨 앞자리 부호에 따라 채운다.

>>> : 무조건 0으로 채운다.

<<8 = *256
<<7 = *128
<<6 = *64
<<5 = *32
<<4 = *16
<<3 = *8
<<2 = *4
<<1 = *2

(a<<1)+a = *3
(a<<3)+a = *9
(a<<4)-a = *15
(a<<6)-(a<<2) = *60

쉬프트 연산의 경우 a<<b 라는 식은 a*2^b라는 식으로 표현된다.

산술 연산에서의 분배 법칙과 결합법칙이 성립하므로 모든 승수에 대한 연산을 쉬프트 연산으

로 (곱하기와 나누기만) 표현할수 있다.

사실 비트연산이 빠르긴 하지만 한번 곱하고 나누기에서는 별로 차이를 못느낀다.

그러나 반복적인 연산 , for문이나 while에서의 쉬프트 연산의 속도는 기존 연산 방식보다

수십배는 빠르게 된다.(아마도 곱하기와 나누기를 다시 어셈블리어로 바꾸고 그걸 다시 셰간

하기 떄문이 아닐까? 곱하기와 나누기 하는것만으로도 연산이 2번씩은 들어가니까..

그냥 비트열만 옮기므로 더 빨라진다.)

게임프로그래밍이나 빠른 속도가 요구되는 통신쪽에서 많이 사용된다고 한다.

이제부턴 몸에 익혀 구구단에도 써먹어야 할때?ㅎㅎ