Binary 从有符号数字中提取位字段

Binary 从有符号数字中提取位字段,binary,bit-manipulation,math,signed,Binary,Bit Manipulation,Math,Signed,我将有符号数(2s补码)存储在32位整数中,我想从中提取16位字段。如果我从一个32位有符号数字中提取低16位,那么只要原始(32位)数字适合16位,结果就会正确吗 对于正数来说,这几乎是正确的,而对于负数来说,这似乎也是正确的。但这能被证明吗 提前感谢是的,在2的补码中,符号位“一直”延伸到左侧。当您将带符号的short转换为带符号的int时,则数字为且具有相同的值 示例:(-2)=1110=>字节(-2)=1111\u 1110 显然,情况正好相反,如果您捕获了至少一个符号位,那么数字的值将

我将有符号数(2s补码)存储在32位整数中,我想从中提取16位字段。如果我从一个32位有符号数字中提取低16位,那么只要原始(32位)数字适合16位,结果就会正确吗

对于正数来说,这几乎是正确的,而对于负数来说,这似乎也是正确的。但这能被证明吗


提前感谢

是的,在2的补码中,符号位“一直”延伸到左侧。当您将带符号的short转换为带符号的int时,则数字为且具有相同的值

示例:
(-2)=1110=>字节(-2)=1111\u 1110

显然,情况正好相反,如果您捕获了至少一个符号位,那么数字的值将保持不变。

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

也就是说,像这样做:

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