ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 하루하나 이진법과 친해지기 - 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

    댓글

Designed by Tistory.