c - 像 unsigned int 一样右移二进制补码

标签 c bit-manipulation

这可能吗?我有一个 signed int,需要将它右移 4 个位置。我无法将 int 转换为 unsigned int,移位然后返回。之后我需要处理它。

所以如果我有这样的位序列:

x = 1001

并且需要将它向右移动 2 个位置:

x = x >> 2;

我得到 1110;

我想得到 0010。我想不出一种方法来使用 and's 和 or's 来做到这一点。有什么想法吗?

这正是我所需要的。

0x12345678 将 56 替换为 0xab,最后得到:0x1234ab78

我的方法是获取56的权利,

右整数 = Ox12345

取56的左边

int left = Ox 78

得到56

int 替换 = 56

向右返回 |左 |替换

返回

Ox1234ab78

如果替换数字左侧的 MSB 为 1,我会遇到问题。因为我将整个东西向左然后向右移动,并且它一直传递 1。

最佳答案

另一种解决方案,因为我记得在不允许我们使用大的十六进制数的高中时做过类似的作业,如下所示:

x = (x >> 2) & ~((1 << 31) >> 1) .这给出了与我的其他答案相同的答案,但消除了对大十六进制数的需要。

关于c - 像 unsigned int 一样右移二进制补码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7233802/

相关文章:

c++ - 具有 extern #define 和 typedef 结构的静态库

python - 如何在 Python 和 C 中使用三角函数在 GMP/MPFR 中获得非常高的精度?

c - UDP源端口什么时候设置?

c - 如何缓冲非阻塞 IO?

c - 在 C 中查找短数组的所有可能子集

c - 这个 "make a triangle loop"循环超过必要时间的任何原因

c - 实现 Booth 算法时的位移位和类型转换问题

c - C 中的按位连接

java - 需要帮助理解这一行

matlab - 将零填充到二进制数中特定位置的命令?