浅谈C语言移位操作
x86汇编移位操作有5类:
1.算数逻辑移位 SAR/SAL SAL: 左移,低位空出位补0,最近移出进CF SAR: 右移,高位空出多少位,就多少位补符号位,最近移出进CF
Signed int a = 5;
a >>= 2; signed int 一般被翻译成 SAL/SAR 2.逻辑移位 SHL/SHR SHL:左移,低位空出位补0,最近移出进CF SHR: 右移,高位空出为补0,最近移出进CF unsigned int i = 0x1234;
i >>= 4; unsigned int 一般被翻译成 SHL/SHR 3.循环移位 ROR/ROL ROL: 左移,低位空出,由高位补,最近移出进CF ROR:右移,高位空出,由低位补齐,最近移出进CF 4.带进位循环移位 RCR/RCL RCL:左移,低位空出,原来的CF补低位,最近移出进CF RCR: 右移,高位空出,原来的CF补高位,最近移出进CF 5.双精度逻辑移位 SHLD/SHRD SHLD/SHRD __1__,___2___,__3___ 1&&2必须是相同位宽,2必须是REG 1左移N,空出的N位,2的高N位补上,但2不动 1右移N,空出的N位,2的低N位补上,但2不动