코딩 [파이썬] ror / rol 함수 Ally.Jin90 2016. 3. 16. 16:24 ROTATE_BITMASK = { 8 : 0xff, 16 : 0xffff, 32 : 0xffffffff, 64 : 0xffffffffffffffff, } # inVal 은 대상 값, numShifts 는 로테이트 할 수 # 예) ROR AL 1 # inVal : AL # numSHifts : 1 def ror(inVal, numShifts, dataSize=32): '''rotate right instruction emulation''' if numShifts == 0: return inVal if (numShifts < 0) or (numShifts > dataSize): raise ValueError('Bad numShifts') if (dataSize != 8) and (dataSize != 16) and (dataSize != 32) and (dataSize != 64): raise ValueError('Bad dataSize') bitMask = ROTATE_BITMASK[dataSize] return bitMask & ((inVal >> numShifts) | (inVal << (dataSize-numShifts))) def rol(inVal, numShifts, dataSize=32): '''rotate left instruction emulation''' if numShifts == 0: return inVal if (numShifts < 0) or (numShifts > dataSize): raise ValueError('Bad numShifts') if (dataSize != 8) and (dataSize != 16) and (dataSize != 32) and (dataSize != 64): raise ValueError('Bad dataSize') bitMask = ROTATE_BITMASK[dataSize] currVal = inVal return bitMask & ((inVal << numShifts) | (inVal >> (dataSize-numShifts))) 저작자표시 비영리 변경금지 (새창열림)