16位补码0X8FA0扩展为32位应该是( 0XFFFF 8FA0 )。
补码的位数扩展即在不改变其本身真值的情况下扩展位数
0X是16进制标识符 计算过程中直接丢掉
为方便对比扩展前后真值将原码(真值)也列出来
下附计算方法:
16进制数8FA0,补码展开
16位补码:1000 1111 1010 0000
16位原码:1111 0000 0110 0000
首位1为符号位,原码数值位111 0000 0110 0000
根据负数补码规则,其原码(真值)取反加一可得补码、而扩展不能改变其真值所以应该前面(高位)补1,即
32位补码:1111 1111 1111 1111 1000 1111 1010 0000
32位原码:1000 0000 0000 0000 0111 0000 0110 0000
首位1依旧是符号位表示负值,原码有效数值位111 0000 0110 0000
与16位原码完全一致,即转化后的补码是正确的,转化为16进制
FFFF 8FA0加16进制前缀0XFFFF 8FA0
总结规律:诸如此类扩展位数的问题,若补码符号位为0(正)则高位补0;若补码符号位为1(负)则高位补1。简而言之,扩展位数时高位应该补的值与符号位相同
PS:博主水平有限,若有错误还请指正。