helperchoi
2015. 4. 1. 11:41
Shift 연산이란 데이터를 비트단위로 이동시켜 값의 증감을 구현하는 연산자이며,
비트단위에 연산이나 데이터 조작이 필요할때 사용한다.
※ 사실 본인도 개발자가 아닌지라 Shift 연산을 언제 왜 써야 하는지는 아직도 이해하지 못하고 있음.
Bash Shell 에서도 아래와 같이 Shift 연산 기능을 제공하고 있다.
1. Right 연산의 표현과 계산 방식
[root@s-node01 ~]# [root@s-node01 ~]# echo $(( 100 >> 4 ))
6
|
- 10진수 데이터 100을 표현한 2진 Bit(1100100)를 오른쪽으로 4Bit 이동
- 계산식 : 100 / 2^4 = 6 (나머지 값은 버림)
2. Left 연산의 표현과 계산 방식
[root@s-node01 ~]# [root@s-node01 ~]# echo $(( 100 << 4 ))
1600
|
- 10진수 데이터 100을 표현한 2진 Bit(1100100)를 왼쪽으로 4Bit 이동
- 계산식 : 100 * 2^4 = 1600
3. 간단한 쉬프트 연산 예제
[root@s-node01 ~]# [root@s-node01 ~]# RUNCNT=10 && for ((RUN=0; RUN <= RUNCNT ; RUN++)); do echo "BINARY_NUM : ${RUN} - $(( 100 << ${RUN} ))"; done BINARY_NUM : 0 - 100 BINARY_NUM : 1 - 200 BINARY_NUM : 2 - 400 BINARY_NUM : 3 - 800 BINARY_NUM : 4 - 1600 BINARY_NUM : 5 - 3200 BINARY_NUM : 6 - 6400 BINARY_NUM : 7 - 12800 BINARY_NUM : 8 - 25600 BINARY_NUM : 9 - 51200 BINARY_NUM : 10 - 102400 [root@s-node01 ~]# [root@s-node01 ~]# [root@s-node01 ~]# RUNCNT=10 && for ((RUN=0; RUN <= RUNCNT ; RUN++)); do echo "BINARY_NUM : ${RUN} - $(( 100 >> ${RUN} ))"; done BINARY_NUM : 0 - 100 BINARY_NUM : 1 - 50 BINARY_NUM : 2 - 25 BINARY_NUM : 3 - 12 BINARY_NUM : 4 - 6 BINARY_NUM : 5 - 3 BINARY_NUM : 6 - 1 BINARY_NUM : 7 - 0 BINARY_NUM : 8 - 0 BINARY_NUM : 9 - 0 BINARY_NUM : 10 - 0 [root@s-node01 ~]# [root@s-node01 ~]# |