【发布时间】:2011-08-30 02:57:51
【问题描述】:
这可能吗?我有一个带符号的 int,需要将它向右移动 4 个位置。我不能将 int 转换为 unsigned int,移位然后再转换回来。之后我需要处理它。
所以如果我有一个像这样的位序列:
x = 1001
并且需要向右移动 2 个点:
x = x >> 2;
我得到 1110;
我想得到 0010。我想不出一种方法来使用 and's 和 or's 来做到这一点。有什么想法吗?
这正是我所需要的。
0x12345678 将 56 替换为 0xab 并最终得到:0x1234ab78
我的方法是得到56的权利,
int right = Ox12345
得到56的左边
int left = 牛 78
得到 56
int 替换 = 56
右转 |离开 |替换
然后返回
Ox1234ab78
如果替换左侧的数字的 MSB 为 1,我会遇到问题。因为我将整个东西向左然后向右移动,它一直将 1 转移。
【问题讨论】:
-
您的答案需要在某处进行转换,即使只是为了构建位掩码。您需要更准确地指定家庭作业的限制条件。
-
我很好奇:什么可能会阻止您使用铸造解决方案?
-
@Henning:这是作业。可能任务指定不这样做。
标签: c bit-manipulation