编码与运算原理

本文详细介绍了计算机中二进制数的四种编码方式:原码、反码、补码和移码。原码直接表示数值,反码用于正负数统一加减,补码则引入了模运算的概念,适用于加减运算,移码将数值移到正数范围,便于幂运算。在计算机中,数据通常以补码形式存储,文章还探讨了补码下的加减乘除运算及溢出处理策略,并提到了硬件实现的考虑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

计算机中对二进制数的编码方式常见的有原码、反码、补码、移码。

概念:1、原码:按照二进制权值进行编码。

            2、反码:正数反码等于原码,负数反码为原码除去符号位各位取反。

            3、补码:正数补码等于原码,负数补码 [x]补 = x + 2^n(n为二进制数的位数)

            4、移码:[x]移 = x + 2^n


理解:1、原码:没什么好说的,按照每位的权值进行编码,保留一个或多个符号位,原码的特点:正负数相加减时不能按位运算,而乘除则相对简单。

            2、反码:反码负数按位取反只有对二进制才有意义,反码能够按照统一的公式进行加减但这个特性其实是由于它和补码的紧密联系而产生的,反码意义不大。

            3、补码:正数补码等于原码,负数补码 [x]补 = x + 2^n,补码就是数学上模运算的应用,以时钟为例,当时针指向9你可以认为是9点也可以认为是-3点,补码有个很有意思的特点,就是在表示范围内,加减法可以按照统一公式进行,并且符号位参与运算,这一点很好证明。补码还有个有意思的特点就是负数的补码为反码加1,这就导致了上边的运算性质。

            4、移码:[x]移 = x + 2^n,可以看到移码就是活生生的把一个数拖到正数范围内,它保留了原来数的相对大小,在处理幂运算时就有了一定优势,也许这就是IEEE754标准把阶码用移码表示的原因吧。


现行计算机中数据多以补码保存,下面就说说定点数补码的加减乘除运算。

加减法:法则:补码进行加减运算按位加,符号位参与运算。

                溢出处理:可以采用双符号位,这样如果两个符号位不同则产生溢出,01表示上溢,10表示下溢。

                硬件设计:并行加法器的设计相对简单。

原码乘法:法则:模仿人工乘法运算,按照如下步骤:如果乘数最低位为1 部分积加上乘数,部分积乘数右移一位。

                    硬件设计:三个寄存器,一个保存乘数,一个被乘数和一个部分积,计数器记录乘数移动次数,一个ALU加法单元。

补码乘法:法则:[x * y]补 = [x]补 * (-y0 + xi * 2 ^ i) ,再次基础上有布斯公式(Booth) :[x * y]补 = [x]补 * (yi+1  - yi)*2^i - 1;

                    改进:定点数两位乘法速度理论上提高一倍。

硬件乘法器:硬件逻辑单元速度快,多用在嵌入式领域。


浮点数运算:浮点数利用定点数运算,如果浮点数相加减时阶码不同,则阶码小的转化为阶码大的以保持运算精度。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值