定点数的表示和运算

    科技2025-11-05  4

    文章目录

    定点数的表示和运算定点数的表示有符号数和无符号数机器数定点表示机器数表示方法 定点数的运算定点数移位运算原码定点数的加减法运算补码定点数加减法运算符号扩展溢出概念和判断方法定点数的乘法运算定点数的除法运算强制类型转换数据的存储和排列

    定点数的表示和运算

    定点数的表示

    有符号数和无符号数

    无符号数

    机器字长的二进制位均为数值位,无符号

    有符号数

    最高位0/1表示正/负

    机器数定点表示

    定点小数

    定点小数是纯小数;

    约定小数点位置在符号位之后,有效数值部分最高为之前

    定点整数

    定点整数是纯整数;

    小数点位置在有效数值部分的最低位之后

    机器数表示方法

    原码表示法

    最高位为符号,其余各位表示数的绝对值纯小数的原码 字长为n+1范围为 − ( 1 − 2 − n ) < = X < = 1 − 2 − n -(1-2^{-n}) <= X <= 1-2^{-n} (12n)<=X<=12n关于原点对称 纯整数的原码 字长为n+1范围为 − ( 2 n − 1 ) < = X < = 2 n − 1 -(2^n-1) <= X <= 2^n -1 (2n1)<=X<=2n1关于原点对称

    补码表示法

    补码可以更好的表示加减法纯小数补码 表示范围: − 1 < = X < = 1 − 2 − n -1 <= X <= 1-2^{-n} 1<=X<=12n比原码多表示-1(1.0000) 纯整数补码 表示范围: − 2 n < = X < = 2 n − 1 -2^n <= X <= 2^n-1 2n<=X<=2n1比原码多表示 − 2 n -2^n 2n (10000000) 补码的算数移位 实现除法功能:符号位与数值位一起右移,保持原符号位数值不变变形补码:模4补码(正/负:00/11)

    反码表示法

    原码与补码相互转化的过渡纯小数反码 表示范围: − ( 1 − 2 − n ) < = X < = 1 − 2 − n -(1-2^{-n}) <= X <= 1-2^{-n} (12n)<=X<=12n关于原点对称 纯整数反码 表示范围: − ( 2 n − 1 ) < = X < = 2 n − 1 -(2^n-1) <= X <= 2^n -1 (2n1)<=X<=2n1关于原点对称

    移码表示法

    常用来表示浮点数的阶码,只能表示整数最小值: − 2 n -2^n 2n(全零) 最大值: 2 n − 1 2^n-1 2n1(全1)移码大,真值就大真值零唯一表示

    不同表示方法之间的项目转化

    正数:原码,反码,补码相同负数: 原码符号位不变,数值位取反得到反码原码符号位不变,数值位取反加1得到补码 补码符号位取反得到移码

    定点数的运算

    定点数移位运算

    算数移位

    正数:移位后添0

    负数:

    原码添0补码左0右1(从低位向高位找到第一个‘1’时分左右,‘1’包含在右)反码全部添1

    符号位不参与运算

    逻辑移位

    将操作数看做无符号数左移或者右移都要添0

    循环移位

    带进位标志位的循环移位不带进位标志位的循环移位适合将数据的低字节数据和高字节数据互换

    原码定点数的加减法运算

    加法准则

    符号相同:绝对值相加,符号不变符号不同:绝对值大的减去绝对值小的,符号取绝对值大的

    减法准则

    减数的符号取反,将其与被减数做原码加法运算

    补码定点数加减法运算

    参与的操作数均为补码按照二进制规则运算,逢2进1符号位与数值位同时参与运算,符号位产生的进位丢掉,结果的符号由运算得出补码运算结果仍是补码

    符号扩展

    正数:在原有的基础上,添0凑位即可负数 原码:符号位为1,其余和正数相同补码:加1填充(整数)加0填充(小数)补码:加1处理

    溢出概念和判断方法

    上溢:大于最大可以表示的正数

    下溢:小于最小可以表示的负数

    补码判断溢出的办法

    一位符号位:

    A的符号位为 A S A_S AS, B的符号位为 B s B_s Bs,运算结果的符号位为 S s S_s Ss

    V = A s B s S s ˉ + A s ˉ B s ˉ S s V = A_sB_s\bar{S_s} + \bar{A_s}\bar{B_s}S_s V=AsBsSsˉ+AsˉBsˉSs

    V=0,表示无溢出;V=1表示有溢出

    双符号位

    00:结果为正数,无溢出

    01:结果正溢出

    10: 结果负溢出

    11:结果为负数,无溢出

    一位符号位根据数据位进位判断

    符号位与最高数位的进位相同,无溢出,否则溢出

    定点数的乘法运算

    原码一位乘法

    符号位异或,被乘数和乘数取绝对值运算部分积取n+1位,初值为0根据乘数的最低位 y n y_n yn判断 y n = 1 y_n=1 yn=1:部分积加上被乘数,右移一位 y n = 0 y_n=0 yn=0:部分积加0右移一位 重复3,判断n次逻辑右移,符号位不参与运算符号位部分积2位,考虑绝对值大于1的情况

    补码一位乘法(Booth算法)

    符号位参与运算,补码的算数右移被乘数双符号位;部分积双符号位,初值为0;乘数取单符号位乘数末位为 y n y_n yn,增设 y n + 1 y_{n+1} yn+1 00或11:部分积右移1位01:部分积加 [ X ] 补 [X]_补 [X],右移一位10:部分积加 [ − X ] 补 [-X]_补 [X],右移一位 执行n+1次,n+1次只累加,不移位

    定点数的除法运算

    原码除数运算(恢复余数法)

    默认商1,如果余数为负,则需要加上除数,恢复正确的余数,商0;

    原码除数运算(不恢复余数法)

    商符和商值分开,符号位不参与运算被减数减去除数 余数为正,商1,余数和商左移1位,减去除数余数为负,商0,余数和商左移1位,加上除数 n+1步余数为负,是需要再加除数,得到正确的余数(余数和被除数号)

    补码除法运算(加减交替法)

    符号位参与运算;除数,被除数,商和余数都用补码表示被除数与除数同号,则被除数减去除数;被除数与除数异号,被除数加上除数若余数与除数同号,商1,余数左移1位减去除数;余数与除数异号,商0,余数左移1位加上除数重复3执行n次;加减次数总共n+1次对商的精度没有要求,则一般采用“末位恒置1”法;

    强制类型转换

    有符号数和无符号数的转换

    强制转化的结果二进制位值不变,改变了解释这些位的方式

    不同字长整数之间的转换

    大字长变量向小字长变量转换 高位直接截断,地位直接赋值 小字长变量向大字长变量转换 负数添1正数添0

    数据的存储和排列

    大端模式和小端模式

    多字节数据存放在连续的字节序列大端模式高字节数据放在低地址部分;小段模式相反小端模式便于机器运算

    边界对齐

    字节寻址可按字节、半字、字寻址每次访存只能读/写一个字边界对齐方式和边界不对齐方式边界对齐空间换时间的思想
    Processed: 0.017, SQL: 8