-
하루하나 이진법과 친해지기 - 3프로그래밍/기초수학 2011. 5. 8. 05:35
2진법 with Shift operation
벌써 3번째 글이 되었습니다. 그리고 전 점점 서른에 가까워 집니다. ...........
이런저런 일들도 잘 안풀리고 요즘들어 좀 여러가지로 심난하기때문에 오늘은,
시프트연산을 준비해보면 어떨까 합니다.
참고삼아 말씀드립니다.
프로그래밍상에서 2진법은 실제로 이곳에 적는것과 동일하지 않습니다.
첫번째 bit는 음수/양수를 구분하는데 사용됩니다.
아래 시프트연산도 마찬가지로, 음수/양수가 변경될수있습니다.
더 자세한 내용은 글의 아래에 링크된 microsoft 문서를 참고해주세요.
저번에 봤던 이진법을 가지고 그대로 하겠습니다.
+,-.*,/ 와 더불어 꽤 유용할수도 있고, 가끔은 별 차이가 없기도 하지만
간단히 적겠습니다.
shift 연산 이란 ?
data block 을 n값만큼 왼쪽/오른쪽(이론상으로의 방향)이동 시킵니다.
연산방향에 관계없이 기존 memory블럭을 벗어나는 데이터는 버려지며 남는 자리는 0으로 채워집니다.
left shift(<<)는 글자그대로 data를 왼쪽방향으로 이동하며, * 2의n승과 같습니다.
right shift(>>)는 반대로 오른쪽으로 이동시키고, / 2의n승이 됩니다.
곱하고 나누기위해서 사용해도 좋지만, 응용해보면 여러가지로 유용하답니다.
a << b
a >> b
a >> 1
a >> 5
상수 변수 상관없이 사칙연산과 같이 사용가능합니다. 더불어 다양한 비트연산자들과 함께 사용할때
더욱 유용할거라 생각합니다. ^^
아래는 저번 글에 있던 2진법들입니다.
-정상 -> 뒤에서부터 = 1자리만 죄다 더하기.
ex1 : (011111)2 -> 1(1) 2(1) 4(1) 8(1) 16(1) 32(0) = (31)10
(011111)2 >> 1 = (001111)2 입니다.
ex2 : (000000)2 -> 1(0) 2(0) 4(0) 8(0) 16(0) 32(0) = (0)10
(000000)2 >> 100 = (000000)2 입니다.
ex3 : (001000)2 -> 1(0) 2(0) 4(0) 8(1) 16(0) 32(0) = (8)10
(001000)2 << 2 = (100000)2 입니다.
ex4 : (000001)2 -> 1(1) 2(0) 4(1) 8(0) 16(0) 32(0) = (1)10
(000001)2 >> 1 = (000000)2 입니다.
ex5 : (100000)2 -> 1(0) 2(0) 4(1) 8(0) 16(0) 32(1) = (32)10
(100000)2 << 1 = (000000)2 입니다.
주의 ! 이진수를 뒤집어서 뒤에서부터 거꾸로 쓴거에요!
바꾼 이진법을 다시 십진법으로 바꾸는건 똑같으니 생략했습니다.
'프로그래밍 > 기초수학' 카테고리의 다른 글
하루하나 이진법과 친해지기 (0) 2011.04.25 하루하나 이진법과 친해지기 (0) 2011.04.16 댓글