我有一个十六进制数字0x8F(二进制10001111).我想改变那个值,所以新的值将是0xC7(11000111).我尝试过:
unsigned char x = 0x8F;
x=x>>1;
Run Code Online (Sandbox Code Playgroud)
但不是0xC7我得到了0x47?关于如何做到这一点的任何想法?
650*_*502 14
无符号数量的右移将使新的零进入,而不是.
请注意,右移不是正确的旋转.要做到这一点,你需要
x = (x >> 1) | (x << 7)
Run Code Online (Sandbox Code Playgroud)
那是因为你想要的是"向右旋转",而不是"右移".所以你需要调整最低位"下降":
x = ((x & 1) << CHAR_BITS-1) | (x >> 1);
Run Code Online (Sandbox Code Playgroud)
应该做的伎俩.
[并且至少有一些编译器会检测到这组特定的操作并转换为相应的ror或rol指令]
| 归档时间: |
|
| 查看次数: |
1099 次 |
| 最近记录: |