【发布时间】:2012-08-27 16:13:55
【问题描述】:
我有一个特定的 C 位移场景,我认为 Stack Overflow 尚未涵盖该场景。 (如果是,我还没找到!)
本练习使用signed ints 作为数据类型。
取值0x80000000(最高有效位中只有一个 1。)
在机器上使用算术右移将其右移一次(我的就是这样做的)。
结果 = 0xC0000000(最左边的字节为 1100 0000)。
继续移动它,你应该从左到右填充一个。
结果 = 0xFFFFFFFF(全为。)
但是:尝试相同的示例,但移动一个额外的位置,全部一起:
0x80000000 >> 0x00000020(右移32次)
你的结果?我不知道。我的结果不是全部。事实上,我得到了0x00000001,这不是我想要的行为。为什么是这样?它是特定于机器的吗?
(背景:家庭作业将我的操作限制为几个位运算符来解决难题。这是难题的一个方面,但远非整个问题。)
【问题讨论】:
-
上天禁止在 Stack Overflow 上覆盖每一天的每一个“位移场景”。我们可以帮助您理解 C,但我当然希望我们不必详细说明所有可能的类似问题。
-
对不起,如果这不是一个合适的问题,我会删除它。你能解释一下为什么这个问题是个问题吗?
-
右移只取 1 并右移不克隆它,所以在移一次 0x1000000 >> 1 后,你得到 0x0100000
-
@Rami,实际上这取决于值是有符号还是无符号
-
别担心,我只是被听起来像是希望最终对 SO 上的每一种位移类型都有一个问题的想法逗乐了。这个问题很好,虽然它肯定是许多重复的问题之一,而且答案应该在任何好的 C++ 教科书中。