[기본원리] 재미있는 쉬프트 연산!

반응형


바로 본론으로 들어갑니다~

쉬프트 연산이란 2진수로 표현된 수의 자리를 좌 또는 우로 밀어내는 (쉬프트) 연산인데요,
자리를 왼쪽으로 옮기는 왼쪽 쉬프트와,
자리를 오른쪽으로 옮기는 오른쪽 쉬프트가 있습니다.


실제로 쉬프트 연산은 정밀한 수치 프로그래밍이나 게임 프로그래밍 등에 많이 사용됩니다.
또한 1회의 연산으로 여러자리를 쉬프트 할 수 있지요.

읽기전에 손가락 한번 클릭~ >_<

고마워요 ~ Chu ~ ♥


테스트 코드

위는 Java 의 10진수 12를 왼쪽으로 2칸 쉬프트 한 프로그램 입니다.

<< 는 왼쪽 쉬프트, 
>> 는 오른쪽 쉬프트를 나타냅니다.

①  <<  ②
위와 같은 코드가 있다면
① 에는 쉬프트 될 값,
② 에는 쉬프트 하는 횟수
가 기록됩니다.

쉬프트 연산도 결국 2진수의 자리를 옮기는 것이므로 10진수 12를 쉬프트 연산하지 못한다고 생각하면 안되지요. 실제로 컴퓨터 내부에서는 10진수도 2진수로 바뀐 뒤에 연산되기 때문에 쉬프트가 가능합니다!
2010/07/10 - [Programing/기본원리] - 2진수의 의미.
2010/07/10 - [Programing/기본원리] - 컴퓨터는 2진수만 취급합니다.


주목할 점은, 쉬프트 한 뒤 빈 자리에는 0이 들어간다는 것입니다 ( 왼쪽 쉬프트에만 해당 )
그리고 쉬프트 한 결과에서 최상위와 최하위 범위를 넘어버린 수는 버려지지요.


쉬프트 연산결과 후에 생긴일...

10진수 12는 2진수 1바이트로 표현하면 -> 00001100 이 됩니다.


이것을 왼쪽으로 2칸 쉬프트 하게되면 2진수로는 00110000 이 되고 이것은 결국 10진수로 48이 되지요.

이것은 곧 원래값의 4배가 되었다는 뜻입니다 ( 12 x 4 = 48 )
그렇다면 이건 또 무엇을 뜻할까요?

바로 1칸 왼쪽 쉬프트마다 값이 2배, 4배, 8배 ... 등으로 증가한다는 것이고,
반대로 오른쪽 쉬프트라면 1/2, 1/4, 1/8 ... 등으로 감소한다는 말입니다.


음... 여기서 중요한 사실이 있네요!
혹시 눈치 채셧나요??

곰곰히 생각보면 바로 쉬프트 연산을 통하여
곱셈과 나눗셈 연산이 가능하다는걸 알 수가 있네요!!
반응형

댓글

Designed by JB FACTORY