2025-11-13 10:43:57
符号位扩展负数前要填充1,是为了让二进制数在位数增加时保持原来的负数性质。比如8位的-5是11111011,扩展到16位得11011,前面补了八个1。这是因为二进制负数的补码规则里,符号位决定正负,扩展时必须用和符号位相同的1来填充,这样数值大小才不会变。
因为二进制补码的规则,负数原码符号位是1,扩展时必须补1,否则会变成正数。比如8位的-1是11111111,扩展到16位要是补0就会变成11111(即+1),这明显错误。正确扩展后是11111,对应的十进制还是-1。数据上验证过,比如-3的原码是10000011,扩展到12位得1,若补0会变成1(即+32769),而补1后保持-3的数值。所以填充1是唯一能保证符号和数值都不变的办法,就像给负数穿上1的“保护衣”一样。
本题链接: