멋진 개발자가 되고 싶어

2. 왼쪽 시프트 그거 왜 하는 건데 (수치적 연산 왼쪽 shift) 본문

자격증 시험 준비/정보처리기능사

2. 왼쪽 시프트 그거 왜 하는 건데 (수치적 연산 왼쪽 shift)

nutonny 2022. 8. 10. 18:40

어디에 활용하는지

왜 알아야하는지 알지 못하면

도저히 외워지지 않는 병이 있다.

 

그래도 웬만하면 대충 넘어가려했는데

도대체 어쩌라고? 싶은 부분이 생겼다.

 

그건 바로

 

수치적 연산의 shift

 

 

 

 

 

 

본문의 내용은 이러했다.

 

02 수치적 연산

산술적 shift는 곱셈과 나눗셈 연산에 이용

 

1) 왼쪽 시프트 

- 왼쪽으로 한 비트씩 이동

- n비트 왼쪽 시프트는 2의 n제곱 한것을 의미(n은 시프트 비트 수)

- 범람(overflow) : 밀려나간 비트가 1일 경우 발생

 

예시) 2의보수 11100111에 대해서 왼쪽으로 1bit 시프트

 

11100111

-> (1)1100111(0) ---- 맨 앞의 1 삭제, 맨 뒤의 0 채움

-> 11001110

 

[출처] 유튜브 영상 part 1-9 자료표현과 연산(3)

https://youtu.be/PON9Nnd9G6s

 

 

일단 내용은 이러한데

그래서 어쩌라고?

 

 

 

일단 가장 먼저 shift를 활용하는 이유에 대해서 궁금했다.

 

 

 

https://letitkang.tistory.com/113

 

[기타] 시프트 연산

오늘은 쉬프트 연산에 대해 알아보겠습니다. 시프트 연산은 컴퓨터의 비트 연산중의 하나입니다. 이 시프트 연산은 2의 거듭제곱수를 곱셉,나눗셈 연산을 할때 사용합니다. 기호는 

letitkang.tistory.com

 

 

검색해보니 일반적인 연산보다

비트연산을 활용하면 속도가 빨라진다는 사실을 알아냈다.

아하!

 

좀 더 생각해보니 그럴 것 같았다.

앞부분의 숫자를 지우고 뒤에 숫자를 채워주는 것만으로

곱셈된 값을 얻을 수 있으니 말이다.

 

 

 

 

그럼 그렇다고 치고

정말 왼쪽으로 한 칸 시프트를 한다해서

2배의 값을 얻을 수 있을까?

 

 

 

익숙한 10진수로 사실인지 확인해보았다.

 

 

 

 

다시 본문의 예시로 돌아가보자.

 

예시에서는 2의 보수 11100111을 왼쪽 시프트 한값을 구했다.

 

2의보수 11100111

-> 1의보수 11100110

-> 2진수 00011001

-> 10진수 25

 

이제 왼쪽 시프트 한 값인 11001110을 보자.

 

2의보수 11001110

-> 1의보수 11001101

-> 2진수 00110010

-> 10진수 50

 

50은 25의 두배다.

정말 한칸 왼쪽 시프트 하여

2의 1제곱, 즉 2배값을 구할 수 있었다.

 

 

 

 

와우 거짓말이 아니었다.

물론 거짓말일리 없겠지만

직접 증명해보는 과정에서 완벽하게 이해가 됐다.

 

 

덕분에 수치적 연산의 시프트의 원리는

절대 잊지 않게 된 거 같다.

뿌듯....(이것때문에 30분이상 시간쓴 건 비밀)

 

 

 

 

 

 

Comments