SW 개발

프로그래밍 > 코딩기법 > 기초사항 > 시프트 연산에 관한고찰

. . . 2009. 1. 29. 11:26
반응형
  • 마크다운변환 : 20190905
  • 기타사항 : 틀린사항은 댓글로 수정바랍니다.

너무 기본적인 코딩은 무시한채 매일 검색만 해서 붙여넣다보니 아주 간단문제에서 부딛히고 말았다 ㅡㅡ;

Shift 연산

기본적으로 Shift 연산을 생각하기엔 2진수로 생각하면 쉬웠다. 하지만 코딩은 대부분 16진수로 이뤄진다는것이다! (생각하기가 너무 싫은 문제도 있지만.. 생각하려니 복잡했다.)

일단 DWORD의 크기부터 알아야 했다ㅡㅡ;

DWORD 의 크기는4바이트.. / 1바이트는 8비트…

  • DWORD dwTemp = 1
  • dwTemp를 16진수로 표현하면.. 0x00000001

저것을 0x00010000 으로 만들고싶었다. (갑자기 멍해졌었다;;)

Shift 연산은 2진수를 기준으로 생각을 하면 쉽다.

    0b00000001 를 1만큼 좌 시프트 시키면.. 0b00000010 이 된다. 
    0b00000001 를 2만큼 좌 시프트 시키면.. 0b00000100 이 된다. 
    0b00000001 를 4만큼 좌 시프트 시키면.. 0b00010000 이 된다. 

그럼 16진수로 넘어와서..

    0x00000001 를 1만큼 시프트 시키면.. 0x00000002 이 된다. 
    0x00000001 를 3만큼 시프트 시키면.. 0x00000008 이 된다. 
    0x00000001 를 4만큼 시프트 시키면.. 0x00000010 이 된다. 

    0x00000001 를 0x00000010 로 만드려면 4 만큼 시프트 
    0x00000001 를 0x00000100 로 만드려면 8 만큼 시프트 
    0x00000001 를 0x00001000 로 만드려면 12 만큼 시프트 

간단한 원리지만.. 16진수를 기준으로 자릿수 한 개를 Shift 할때는 (4*자릿수)만큼 Shift 해야한다는소리다!

0x00000001 를 0x00010000 로 만드려면..

4*4 를 Shift 해야하니.. 0x10 만큼 Shift 하면 된다!!!

       0x00000001 << 0x01 == 0x00010000;

완전 기본적이지만 갑자기 생각하려니 그냥 멍해져서 정리했음;;

반응형