꽤 오래전 일인데.. Rotate 를 써야 하는 경우가 있었습니다.

제가 작업할 때 주로 사용하는 언어는 C/C++ 인데...

C/C++ 에서는 Shift 연산자는 있지만~ Rotate 에 대한 내용은 없더라구요.

그래서 그 때~ 가볍게 작성한 Rotate 함수입니다~ㅋ

#define LEFT    0
#define RIGHT   1

void Rotate(unsigned char &src, int mode)
{
    if (mode == RIGHT) {
        unsigned char temp;
        temp = src;
        temp <<= 7;

        src >>= 1;
        src |= temp;
    }
    if (mode == LEFT) {
        unsigned char temp;
        temp = src;
        temp >>= 7;

        src <<= 1;
        src |= temp;
    }
}

한바이트에 대해서 Rotate 를 하게 되는데 mode 에~ LEFT, RIGHT 를 써서

방향을 지정해줄 수도 있습니다.

이글루스에 있던 자료를 백업차원에서 티스토리에도 올려봅니다~ㅋ

YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST
  1. BlogIcon vbdream 2008.11.14 21:50  댓글주소  수정/삭제  댓글쓰기

    ㅋㅋㅋ 왠지 전 ASM이 더 친숙하더라구요 :-)
    __asm
    {
    ROL DWORD PTR DS:[ESI], EAX
    }

  2. ㅎㅎ 2008.12.01 15:35  댓글주소  수정/삭제  댓글쓰기

    뭐.. VC에 _rotl, _rotr, _lrotl, _lrotr 이라는 함수가 있던걸로 기억합니다.

  3. canelia04 2014.01.03 22:24  댓글주소  수정/삭제  댓글쓰기

    #define LEFT 0
    #define RIGHT 1
    __declspec(naked) unsigned char __fastcall rotate(unsigned char value, int dir)
    {
    __asm {
    mov al, cl
    cmp edx, RIGHT
    jz _ROTATE_RIGHT

    rol al , 1
    retn
    _ROTATE_RIGHT:
    ror al, 1
    retn
    }
    }

    저도 asm이..ㅋㅋ