二进制快速补码转换的快捷方式

我们将看到一个简化从负到正的转换的快捷方式,它用于二进制快速补码转换,是一个非常方便的操作。

二进制快速补码转换的快捷方式

就像对无符号数字的操作一样,可以溢出硬件来表示结果的能力,因此可以在两个补码上进行操作。溢出发生在最左边的保留位的二进制位模式是不一样的无限数量的数字(符号位不正确):0左边的位模式时数量是负数或1数量是正的。

签名与无符号的应用既适用于负载,也适用于算术。

二进制快速补码转换的快捷方式

签名负载的功能是重复复制符号以填充寄存器的其余部分——称为符号扩展——但其目的是在寄存器内正确地表示数字。无符号加载只需在数据的左边填上操作系统,因为位模式所表示的数字是无符号的。

当将一个64位的双字加载到64位寄存器中时,这个点是没有实际意义的;签名和无符号加载是相同的。RISC-V确实提供了两种类型的字节负载:加载字节无符号(lbu)将字节视为无符号数,因此零扩展以填充寄存器的最左边部分,而load字节(lb)则与签名整数一起工作。由于C程序几乎总是使用字节来表示字符,而不是将字节看作是非常短的符号整数,所以lbu实际上只用于字节负载。

二进制快速补码转换的快捷方式

与上面讨论的签名数字不同,内存地址自然从0开始,并继续到最大的地址。换句话说,负面地址毫无意义。因此,程序有时需要处理一些可以是正的或负的数字,有时也要处理一些只能是正数的数字。一些编程语言反映了这种区别。例如,将前整数和后一个无符号整数(无符号长整数)命名。一些C风格的指南甚至建议将前者声明为长时间的长整数,以保持清晰的区别。

在处理两个补码时,让我们检查两个有用的快捷方式。第一个快捷方式是一种快速的方法来否定两个补码的二进制数。简单地将每一个0到1和1到0,然后在结果中添加一个。这个快捷方式是基于这样的观察:一个数字的和它的反向表示必须是111。Hltwo代表1。因为x+x-所以jc+x+l=orjc+l x。(我们用这个符号来表示x从0到1的每一点,反之亦然。)

二进制快速补码转换的快捷方式

我们的下一个快捷方式告诉我们如何将用n位表示的二进制数转换成以多于n位表示的数字。捷径就是从较小的数量——符号位——取最重要的位,然后复制它来填充更大数量的新位。旧的非符号位被简单地复制到新的双字的正确部分。这个快捷方式通常称为符号扩展。


分享到:


相關文章: