Tuuna Computer Science

[ROTATE SHIFT] C 언어 회전시프트 TIP 본문

C language

[ROTATE SHIFT] C 언어 회전시프트 TIP

GuTTe 2019. 5. 18. 12:45

 

// [ROTATE shift] 

unsigned int _rotl(unsigned int value, int shift) {
    if ((shift &= 31) == 0)
      return value;
    return (value << shift) | (value >> (32 - shift));}
    
/* 이때 32는 int형이 32일 때를 가정한 것이다. */


unsigned int _rotr(unsigned int value, int shift) {
    if ((shift &= 31) == 0)
      return value;
    return (value >> shift) | (value << (32 - shift));}

 

처음에 1바이트를 기준으로 하고 있었는데 int가 32비트라서 생각치 못한 값이 나와서 놀램.

근디 저렇게 구현하는 것보다

gcc inline어셈블리 사용해서 ROL이나 ROR명령어 쓰는게 현실적으로 더 빠를거 같고, stackoverflow에서도 권장하는거 같음.

 

Comments