1

我有以 32 位整数存储的有符号数字(2s 补码),我想从中提取 16 位字段。如果我从 32 位有符号数中提取低 16 位,只要原始(32 位)数适合 16 位,结果是否正确?

对于正数来说,这是微不足道的,对于负数来说似乎也是如此。但是可以证明吗?

提前致谢

4

2 回答 2

3

是的,在二进制补码中,符号位“一直”向左延伸。当您将带符号的 short 转换为带符号的 int 时,该数字是“符号扩展”并且具有相同的值。

例子:Nibble(-2) = 1110 => Byte(-2) = 1111_1110

显然相反,如果您捕获至少一个符号位,则该数字的值保持不变。

于 2008-11-03T08:41:56.660 回答
0

从我(第二次)阅读您的问题来看,您似乎不需要“提取”任何位,而是需要转换整数?

即做这样的事情:

int negative = -4711;
short x = (short) negative;

在这种情况下,编译器将确保在赋值中尽可能多地转换原始数字的精度。即使底层硬件没有使用 2:s 补码也是如此。如果是,那么这很可能只是截断,正如 Motti 所解释的那样。

于 2008-11-03T08:46:39.163 回答