c++ - 如何在 C++ 中右移位?

标签 c++ bit-shift

我有一个十六进制数 0x8F(二进制为 10001111)。我想右移该值,因此新值将是 0xC7 (11000111)。我试过:

unsigned char x = 0x8F;
x=x>>1; 

但我得到的不是 0xC7,而是 0x47?关于如何执行此操作的任何想法?

最佳答案

右移一个无符号数将产生新的输入,而不是一个。

请注意,右移不是右旋转。为此,您需要

x = (x >> 1) | (x << 7)

关于c++ - 如何在 C++ 中右移位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28124336/

相关文章:

c# - C#中的循环左旋转算法

c++ - 以基类为模板参数继承基构造函数(MSVC)

c - Ansi C 中的位设置和位移位

c++ - Windows API 线程池简单示例

c++ - 如何将共享资源对象的生命周期绑定(bind)到其用户生命周期的 union ?

c - 如何通过多个字节数组移动一个字节

javascript - 为什么 3,758,096,384 << 1 给出 768

c - 在 long 中找到最重要的设置位

c# - 全局与成员函数

c++ - 为什么在我显示无模式对话框后隐藏了选择?