前面学习了左移和右移,实际上还有循环移动,移出的位数值到另一端装入,比如下面的stl语句
L l#15790320
RLD 9
T MD32
最后数字是-505290751
15790320换成32位二进制是 0000,0000,1111,0000,1111,0000,1111,0000
循环左移第一次结果是0000,0001,1110,0001,1110,0001,1110,0000
循环左移第二次结果是0000,0011,1100,0011,1100,0011,1100,0000
循环左移第三次结果是0000,0111,1000,0111,1000,0111,1000,0000
循环左移第四次结果是0000,1111,0000,1111,0000,1111,0000,0000
循环左移第五次结果是0001,1110,0001,1110,0001,1110,0000,0000
循环左移第六次结果是0011,1100,0011,1100,0011,1100,0000,0000
循环左移第七次结果是0111,1000,0111,1000,0111,1000,0000,0000
循环左移第八次结果是1111,0000,1111,0000,1111,0000,0000,0000
循环左移第九次结果是1110,0001,1110,0001,1110,0000,0000,0001
最高位是符号位,为1,这是一个负数,要想知道相应的十进制数是多少,需要先减1,变成
1110,0001,1110,0001,1110,0000,0000,0000然后把符号位变成0,其他位取反,数据变成
0001,1110,0001,1110,0001,1111,1111,1111这个正数对应的十进制是505290751,
那么负数就是-505290751
L L#-15790320
RRD 9
T MD 36
这一段是将双整型向右循环移动。-15790320换成32位的二进制数是1111,1111,0000,1111,0000,1111,0001,0000
循环右移第一次结果是0111,1111,1000,0111,1000,0111,1000,1000
循环右移第二次结果是0011,1111,1100,0011,1100,0011,1100,0100
循环右移第三次结果是0001,1111,1110,0001,1110,0001,1110,0010
循环右移第四次结果是0000,1111,1111,0000,1111,0000,1111,0001
循环右移第五次结果是1000,0111,1111,1000,0111,1000,0111,1000
循环右移第六次结果是0100,0011,1111,1100,0011,1100,0011,1100
循环右移第七次结果是0010,0001,1111,1110,0001,1110,0001,1110
循环右移第八次结果是0001,0000,1111,1111,0000,1111,0000,1111
循环右移第九次结果是1000,1000,0111,1111,1000,0111,1000,0111
这是一个负数,先减1得到1000,1000,0111,1111,1000,0111,1000,0110
然后符号位为0,各位取反,得到0111,0111,1000,0000,0111,1000,0111,1001,这个正数是2004908153,所以右移9位得到的负数是-2004908153