符号扩展问题

xiaoxiao2021-02-27  315

符号扩展分类

(1)无符号扩展

这个很简单,就是把二进制要扩展的高位 置零就行。 比如:0100,值为4。扩展后0000 0100,值为4. 1000,值为8。扩展后0000 1000,值为8.

(2)有符号扩展

扩展方法为把原最高位复制到要扩展的所有高位上。 比如:0100,值为4。扩展后0000 0100,值为4。 1010,值为-6。扩展后1111 1010,值为-6。

这里详细解释一下1010取值-6的问题。

首先要明白一点:在计算机内部都是用补码来存放数的。

原码->补码: 正数的补码等于原码。 负数的补码为原码符号位不变,其余位取反,然后整个数加1(补码=反码+1)。也可以理解从最右侧开始数第一个1不变,向左每一位取反(除了符号位)。

补码->原码: 正数的原码等于补码。 负数的原码等于补码-1,再取反。反码=补码-1,原码=反码取反。也可以理解为补码的补码等于原码。

在计算机内存储的值是1010,这是一串补码,想要知道它的值要先翻为原码,1010的原码为1110=-6。 1010扩展时遵循原最高位复制到要扩展所有高位上的原则,1010的扩展码为1111 1010,这个扩展码同样以补码形式存储在计算机中,想要知道它的值要先翻为原码,1111 1010的原码为1000 0110=-6。 因此扩展前后值相等。

转载请注明原文地址: https://www.6miu.com/read-14576.html

最新回复(0)