【发布时间】:2013-05-21 06:35:14
【问题描述】:
我正在尝试检查是否在无符号整数中设置了位。我不确定我怎么能做到这一点,但我认为它会是这样的。我正在尝试用 C++ 制作 cdq 指令(但它是一个函数)
这就是我所拥有的
unsigned int cdq(unsigned int eax)
{
unsigned int edx = 0;
if( (eax >> 31) & 1 ) { edx = 0xFFFFFFFF; }
return edx
}
当我使用具有以下值的函数时:
cdq(0x12345678) 位 31 设置为 (1) 所以它应该返回 (unsigned int)-1 cdq(0x01) 位 31 未设置 (0) 所以它应该返回 0
问题是它总是返回 0,我不知道为什么
【问题讨论】:
-
0x12345678 中的第 31 位如何设置?最高位设置为第 28 位。
-
@juanchopanza "你需要
eax>>30" -- 错误。 -
eax & 0x7FFFFFFF如果“最后”位为 0,则为 0,否则为 != 0。假设 unsigned int 至少有 32 位。然后注意在 0x12345678 中第 31 位没有设置。 -
@JimBalter 我以某种方式阅读了“第 31 位”而不是“第 31 位”。我的错。
-
@JimBalter 你是对的,这真的很糟糕。我希望我能活到足够长的时间来弥补这个不可原谅的行为。同时,我已经删除了冒犯性的评论,希望这一行为能够在某种程度上消除这种失常。