![]() |
1
3
是的,在二进制补码中,符号位“一直”向左延伸。当你将一个有符号的short转换为有符号的int时,数字是 "sign extended" 并且具有相同的值。
例子:
显然,情况正好相反,如果你捕获了至少一个符号位,那么数字的值保持不变。 |
![]() |
2
0
从我对你问题的(第二次)解读来看,你似乎不需要“提取”任何比特,而是需要转换整个数字? 即做这样的事情:
在这种情况下,编译器将确保在赋值中尽可能多地转换原始数字的精度。即使底层硬件没有使用2:s补码,情况也是如此。如果是这样,那么这很可能只是一个截断,正如Motti所解释的那样。 |