定点数运算及数制转换

合集下载

二进制与机器码

二进制与机器码

4
十进制小数转换为二进制数
转换规则:乘2取进位 (x)10 =(. k1 k2 …kn-1kn)2=(k1×2-1+k2×2-2+…+kn-1×2n-1+kn × 2-n)10 k1=x乘2取进位,k2=(2×x-k1)乘2取进位,……直至余数为0 例: (0.125)10=(0.001)2 0.125×2=0.25 进位为0 0.25×2=0.5 进位为0 0.5×2=1 进位为1,余数为0,计算结束 练习: (0.625)10= (0.101)2 (23.25)10= (10111.01)2
3
十进制整数转换为二进制数
转换规则:除2取余 (x)10 =(knkn-1…k2k1)2=(kn×2n-1+kn-1×2n-2+…+k2×21+k1)10 k1=x除2取余数,k2=(x-k1)/2除2取余,……直至商数小于2
(27)10=(11011)2
(10100)2 例: (20)10= (1000011)2 (67)10= (10000000)2 (128)10=
定点除法(1)
符号位:两数相除.符号位相加. 0+0=0, 1+0=0+1=1, 1+1=1 0 数值部分:补码相除(|除数|>|被除数|)
17
定点除法(2)—恢复余数法
18
定点除法(3)—加减交替法
19

机器数的表达范围有限,两数之和超出表示范围时,产生 溢出(overflow) 例: 01100101 + 01000011 ——————— 10101000 正数相加, 结果为负数
15
定点乘法
符号位:两数相乘.符号位相加. 0+0=0, 1+0=0+1=1, 1+1=1 0 数值部分:原码相乘 0.000 +0.101 0.101 ——— × 0.011 0.101 ———— 0.010 1 101 +0.101 101 ——— + 000 0.111 ———— 0.011 11 0.001111 +0.000 ——— 0.011 0.001 111 累加器初值为0 乘数末位为1,加被乘数 部分积 部分积右移一位 乘数倒数第二位为1,加被乘数 第二次部分积 第二次部分积右移一位 乘数最高位为0,加0 第三次部分积 16 第三次部分积右移一位,得结果

定点数的表示

定点数的表示

指整个机器字长的全部二进制位均表示数值位,相当于数的绝对值。

若机器字长为n+1位,则数值表示为:X=X0X1X2...Xn 其中Xi={0,1}, 0<=i<=n 即X0*2^n + X1*2^(n-1) + X2*2^(n-2) + ... + Xn-1*2 + Xn数值范围是0≤X≤2^(n+1) - 1例如:1111表示15。

编辑本段1.2 带符号数的表示最高位被用来表示符号位,而不再表示数值位。

例如:1111 是 -7编辑本段(1) 定点整数小数点位固定在最后一位之后称为定点整数。

若机器字长为n+1位,数值表示为:X=X0X1X2...Xn,其中Xi={0,1},0≤i≤n 即(-1)^X0 * (X1*2^(n-1) + X2*2^(n-2) + ... + Xn-1*2 + Xn)数值范围是 -(2^n-1)≤X≤2^n-1例如:1111表示-7。

编辑本段(2) 定点小数小数点固定在最高位之后称为定点小数。

若机器字长为n+1位,数值表示为:X=X0.X1X2...Xn,其中Xi={0,1},0≤i≤n (这里X0不表示数字,只表示符号,若X0=0,则代表X=0.X1X2...Xn,X0=1,则代表-0.X1X2...Xn)。

即 (-1)^X0 * (X1*2^(-1)) + X2*2^(-2) + ... + Xn-1*2^(-n+1) + Xn*2^(-n)原码是用机器数的最高一位代表符号,以下给位给出数值绝对值的表示方法。

其定义为:整数:[X]原=X (0≤ x<2^n)[X]原=2^n-X (-2^n<X≤0)小数:[X]原=X (0≤X<1)[X]原=1-X (-1<X≤0)这里X是数的实际值(真值),[X]原为原码表示的机器数。

例如:真值X=+1001,[X]原=01001;真值X=-1001,[X]原=10000-(-1001)=11001;真值X=-0.1001,[X]原=1-(-0.1001)=1.1001。

定点数运算

定点数运算

第三节定点数运算定点数运算包括移位、加、减、乘、除几种。

一、移位运算1.移位的意义移位运算在日常生活中常见。

例如15米可写作1500厘米,单就数字而言,1500相当于小数点左移了两位,并在小数点前面添了两个0;同样15也相当于1500相对于小数点右移了两位,并删去了小数点后面的两个0。

可见,当某个十进制数相对于小数点左移n位时,相当于该数乘以10n;右移n位时,相当于该数除以10n。

计算机中小数点的位置是事先约定的,因此,二进制表示的机器数在相对于小数点作n 位左移或右移时,其实质就便该数乘以或除以2n(n=1,2...n)。

移位运算又叫移位操作,对计算机来说,有很大的实用价值,例如,当计算机没有乘(除)运算线路时,可以采用移位和加法相结合,实现乘(除)运算。

计算机中机器数的字长往往是固定的,当机器数左移n位或右移n位时,必然会使其n 位低位或n位高位出现空位。

那么,对空出的空位应该添补0还是1呢?这与机器数采用有符号数还是无符号数有关,对有符号的移位叫算术移位。

2.算术移位规则对于正数,由于[x]原=[x]补=[x]反=真值,故移位后出现的空位均以0添之。

对于负数,由于原码、补码和反码的表示形式不同,故当机器数移位时,对其空位的添补规则也不同。

下表列出了三种不同码制的机器数(整数或小数均可),分别对应正数或负数,移位后的添补规则。

必须注意的是:不论是正数还是负数,移位后其符号位均不变,这是算术移位的重要特点。

不同码制机器数移位后的空位添补规则码制添补代码正数原码、补码、反码0原码0负数补码左移添0右移添1反码 1由上表可得出如下结论:(1)机器数为正时,不论左移或右移,添补代码均为0。

(2)由于负数的原码其数值部分与真值相同,故在移位时只要使符号位不变,其空位均添0。

(3)由于负数的反码其各位除符号位外与负数的原码正好相反,故移位后所添的代码应与原码相反,即全部添1。

(4)分析任意负数的补码可发现,当对其由低位向高位找到第一个“1”时,在此“1”左边的各位均与对应的反码相同,而在此“1”右边的各位(包括此“1”在内)均与对应的原码相同,即添0;右移时困空位出现在高位,则添补的代码应与反码相同,即添1。

c语言定点运算

c语言定点运算

c语言定点运算C语言是一种广泛应用于计算机科学和软件开发领域的编程语言。

在C语言中,定点运算是一种非常重要的运算方式,它主要用于处理整数和小数点数值,而不是浮点数。

本文将介绍C语言中的定点运算的概念、原理和应用。

一、定点运算的概念定点运算是一种基于定点数的运算方式。

在计算机中,定点数是以固定的位数表示的数值,通常是用二进制表示。

定点运算主要通过移位操作来进行乘法和除法运算,以及通过位运算来进行加法和减法运算。

相比于浮点运算,定点运算具有运算速度快、占用内存少的优势。

二、定点运算的原理定点运算的原理主要包括定点数的表示和定点运算的实现。

定点数的表示通常有两种方式:定点数表示法和定点数格式。

定点数表示法是指用固定的位数来表示数值,通常包括整数和小数部分,其中小数部分的位数可以根据需要进行调整。

定点数格式是指用二进制表示数值的方式,通常采用补码表示法。

定点运算的实现主要依靠移位操作和位运算来完成。

移位操作是指将定点数的二进制位向左或向右移动一定的位数,以实现乘法和除法运算。

在移位操作中,向左移动一位相当于乘以2的倍数,向右移动一位相当于除以2的倍数。

位运算是指对定点数的二进制位进行逻辑运算,以实现加法和减法运算。

位运算包括与运算、或运算、异或运算和取反运算。

三、定点运算的应用定点运算在很多领域都有广泛的应用。

例如,在图像处理中,定点运算可以用于图像的缩放、旋转和平移等操作。

在音频处理中,定点运算可以用于音频的压缩、解压缩和滤波等处理。

在信号处理中,定点运算可以用于信号的采样、重构和滤波等处理。

此外,定点运算还可以应用于金融计算、物理模拟和人工智能等领域。

四、定点运算的优缺点定点运算具有一些优点,如运算速度快、占用内存少、精度可控等。

然而,定点运算也存在一些缺点,如精度有限、溢出和舍入误差等。

为了解决这些问题,通常可以采用定点数的扩展表示、舍入规则和溢出处理等方法。

总结:本文介绍了C语言中的定点运算的概念、原理和应用。

第2章 定点数运算

第2章 定点数运算

第2章 DSP定点数运算1 定点的基本概念及运算实现的基本原理2 DSP定点算术运算实现的基本原理2018-09-21计算机中定点数有三种表示方法,原码、反码和补码 定点DSP 芯片的数值计算:一般采用补码形式的整型数来表示操作数;整型数的表示范围由DSP 芯片的字长决定,一般为16或24位;字长越长,所能表示的数的范围越大,精度也越高。

同样数值的数可以用不同bit 的二进制数表示用更多位表示有符号数时,左边填充符号位(6)10 0110 0000 0110(-5)10 1011 1111 1011定点DSP芯片处理小数的方法:定标:由程序员确定一个数的“小数点”处于16位的哪一位。

•通过设定“小数点”在16位数中的不同位置,即可表示不同大小和不同精度的小数;•此处的“小数点”是一个隐式的小数点,对DSP芯片来讲,参与计算的就是16位的整型数,并不存在真正意义上的小数点。

•数的定标的两种表示方法:①Q表示法:Q后面的数表示该数的小数点右边有几位;【例】Q15:该数小数点右边有15位,即15位小数、无整数位;Q10:该数小数点右边有10位,即10位小数、5位整数位。

②S表示法:能清楚地表示该数小数点左右的位数。

定点DSP芯片处理小数的方法:Q、S表示法所能表示的十进制数值的精度和范围:•同样的一个16位数,若Q值不同,则所表示的数也不同。

【例】不同Q值时的16进制数2000H的值。

若用Q0表示,则16进制数2000H=8192若用Q15表示,则16进制数2000H=0.125•不同Q值所能表示的数的精度和范围都不同:•① Q越大,表示的数值范围越小,但精度越高;•②相反,Q越小,表示的数值范围越大,但精度越低;•对于定点数,数值表示范围和精度是一对矛盾体。

小数与定点整数之间的转换小数( x )转换为定点整数( xq ):定点整数( xq )转换为小数( x ):•【例】小数 x =0.6,定标Q=15,求对应的定点整数 xq ?注:└┘表示下取整。

定点数的表示和运算

定点数的表示和运算

第二章定点数的表示和运算(共6页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--第二章数据的表示和运算一、选择1、补码定点整数0101 0101 左移两位后的值为2、补码定点整数1001 0101 右移一位后的值为3、计算机内部的定点数大多用补码表示,以下是一些关于补码特点的叙述:I.零的表示是唯一的II.符号位可以和数值部分一起参加运算III.和其值得对应关系简单、直观IV .减法可以用加法来实现在以上叙述中,()是补码表示的特点。

A. I和IIB. I和IIIC. I和II和IIID. I和II和IV4、n位定点整数(有符号)表示的最大值是5、对于相同位数(设为N位,不考虑符号位)的二进制补码小数和十进制小数,二进制小数能表示的数的个数/十进制小数所能表示的个数为6、若定点整数64位,含一位符号位,采用补码表示,所能表示的绝对值最大负数为7、若定点整数64位,含一位符号位,采用补码表示,则所能表示的最大正数为8、定点小数反码[X]反=···X n,表示的数值范围是9、5位二进制定点小数,用补码表示时,最小负数是10、下列关于补码和移码关系的叙述中,()是不正确的。

A.相同位数的补码和移码表示具有相同的数据表示范围B.零的补码和移码表示相同C.同一个数的补码和移码表示,其数值部分相同,而符号相反D.一般用移码表示数的阶,而补码表示定点整数11、设[x]补=,当满足()时,x<-1/2成立。

A. x1必须为1,x2x3x4至少有一个为1B. x1必须为1,x2x3x4任意C. x1必须为0,x2x3x4至少有一个为1D. x1必须为0,x2x3x4任意12、设[x]补=,当满足()时,x>-1/2成立。

A. x1必须为1,x2x3x4至少有一个为1B. x1必须为1,x2x3x4任意C. x1必须为0,x2x3x4至少有一个为1D. x1必须为0,x2x3x4任意13、若[x]补=1x1x2x3x4x5x6,其中x i(1≤i≤6)取0或1,若要x>-32,应当满足()A. x1为0,其他各位任意B. x1为1,其他各位任意C. x1为1,x2---x6中至少有一位为1D. x1为0,x2---x6中至少有一位为114、若[x]补=,其中x i取0或1,若要x>-32,应当满足()A. x1为0,其他各位任意B. x1为1,其他各位任意C. x1为1,x2---x6中至少有一位为1D. x1为0,x2---x6中至少有一位为1215、设x为整数,[x]补=,若要x<-16,x1····x5应满足的条件是()A. x1····x5至少有一个为1B. x1必须为0,x2····x5至少有一个为1C. x1必须为0,x2····x5任意D. x1必须为1,x2····x5任意16、已知定点小数X的补码为,且X≤,则必有()A. x1=1, x2=0, x3=1B. x1=1C. x1=0,且x2x3 不全为1D. x1=0, x2=0, x3=017、一个8位寄存器内的数值为,进位标志寄存器C为0,若将此8位寄存器循环左移(不带进位位)1位,则该8位寄存器和标志寄存器内数值分别为18、设机器数字长8位(含1位符号位),若机器数BAH为原码,则算术左移1位和算术右移1位分别得19、设机器数字长8位(含1位符号位),若机器数DAH为补码,则算术左移1位得,算术右移1位得20、设x为真值,x*为其绝对值,满足[-x*]补=[-x]补,当且仅当()A. x任意B. x为正数C. x为负数D.以上说法都不对21、16位补码0x8FA0扩展为32位应该是22、在定点运算器中,无论采用双符号位还是单符号位,必须有,它一般用“异或”门来实现。

定点数除法运算

定点数除法运算
• 上商0,加Y; • 上商1,减Y。
用异或门实现 可控取反: y0=y y1=y 11
0 1 0
0
y1
x1 y2

x2
y3
x3



x4




x5




x6




q0 = 0
q1
q2
q3
r3
r4
r5
r6
12
4.4.2 补码除法运算
补码不恢复余数除法的运算规则: 1.被除数与除数同号,则被除数减去除数;被除数与 除数异号,则被除数加上除数。 2.若所得余数与除数同号,则上商1,余数左移一位减 去除数;若所得余数与除数异号,则上商0,余数左移 一位加上除数。 3.重复第2步,若采用末位恒置1法,则共做n次(n为 除数补码包括符号位的位数)。 4.商的符号位与数值位均在运算中产生。
原码加减交替法的运算规则可归纳如下:
1)若余数≥0,上商“1”,余数左移一位,减除数; 2)若余数<0,上商“0”,余数左移一位,加除数。
5
例:已知被除数X=-0.10001011,除数Y=+0.1110, 用加减交替法求商。 解:
商符=10=1 除数的相反数: [- Y]补 =11.0010
商 操作 X,Y异号 +[Y]补 1 R1与Y同号,商1
←1
+[-Y]补 0 R2与Y异号,商0
←1
+[Y3;[-Y]补 1 R3与Y同号,商1
←1
∴[商]补=1.0111
R = -0.1101×2-4
1 未位恒置1
作业

定点数加减法

定点数加减法

EY
④ 舍入操作
恒舍法,恒进法,0舍1进法
下面举一个浮点加的实例。
【例3-12】 0.101011)2。 阶码
010 2 010 2 设有两个浮点数X=2 0.1101012,Y=2 (-
尾数 00.110101 11.010101
[X]浮=11,10; [Y]浮=11,11;
① 对阶
[E]补=[EX]补+[-EY]补=1110+0001=1111,即E =-1,将MX右移一位, 其阶码加1,得 [ X ] =11,11;00.011011(用0舍1入法)
2. 补码的减法运算
• 公式[x–y]补=[x+(–y)]补=[x]补+[–y]补 • 只要证明 [–y]补= –[y]补,上式即得证。证 明如下:
• 由于 [x+y]补= [x]补+[y]补 ,可得 ① [y]补= [x+y]补–[x]补, • 又 [x–y]补= [x+(–y)]补= [x]补+[–y]补,同理可得 ② [–y]补= [x – y]补–[x]补
(3) 63+66=129 0 1111111 0 1000001 1 0000001 正溢
(4) -63+(-66)=-129 1 1000001 1 0111110 0 1111111 负溢
① 采用一个符号位判断
两正数相加结果为负或两 负数相加结果为正,则溢 出
溢出= A n BnS n +A 整数一位乘法
计算机中的乘法运算采用的方法是:将n位乘转换为n次“累加 与移位”,即每一步只求一位乘数所对应的新部分积,并与原部分 积作一次累加,然后右移一位。
右图是无符号整数一位乘的算法 流程图。图中使用了3个寄存器A、B 和 C。 B用来存放被乘数; C存放乘数; A初值为0,然后存放部分积,最后 存放乘积高位。 由于乘数每乘一位该位代码就不再 使用,因此用A和C寄存器联合右移以 存放逐次增加的部分积,并且使每次 操作依据的乘数位始终在C的最低位。 乘法完成时,A与C存放的是最后乘积, 其中C的内容是乘积的低位部分。

定点运算

定点运算

一、移位运算二、加法与减法运算三、软件技术的兴起和发展四、除法运算第三节定点数运算定点数运算包括移位、加、减、乘、除几种。

一、移位运算1.移位的意义移位运算在日常生活中常见。

例如15米可写作1500厘米,单就数字而言,1500相当于小数点左移了两位,并在小数点前面添了两个0;同样15也相当于1500相对于小数点右移了两位,并删去了小数点后面的两个0。

可见,当某个十进制数相对于小数点左移n位时,相当于该数乘以10n;右移n位时,相当于该数除以10n。

计算机中小数点的位置是事先约定的,因此,二进制表示的机器数在相对于小数点作n 位左移或右移时,其实质就便该数乘以或除以2n(n=1,2...n)。

移位运算又叫移位操作,对计算机来说,有很大的实用价值,例如,当计算机没有乘(除)运算线路时,可以采用移位和加法相结合,实现乘(除)运算。

计算机中机器数的字长往往是固定的,当机器数左移n位或右移n位时,必然会使其n 位低位或n位高位出现空位。

那么,对空出的空位应该添补0还是1呢?这与机器数采用有符号数还是无符号数有关,对有符号的移位叫算术移位。

2.算术移位规则对于正数,由于[x]原=[x]补=[x]反=真值,故移位后出现的空位均以0添之。

对于负数,由于原码、补码和反码的表示形式不同,故当机器数移位时,对其空位的添补规则也不同。

下表列出了三种不同码制的机器数(整数或小数均可),分别对应正数或负数,移位后的添补规则。

必须注意的是:不论是正数还是负数,移位后其符号位均不变,这是算术移位的重要特点。

不同码制机器数移位后的空位添补规则码制添补代码正数原码、补码、反码0原码0负数补码左移添0右移添1反码 1由上表可得出如下结论:(1)机器数为正时,不论左移或右移,添补代码均为0。

(2)由于负数的原码其数值部分与真值相同,故在移位时只要使符号位不变,其空位均添0。

(3)由于负数的反码其各位除符号位外与负数的原码正好相反,故移位后所添的代码应与原码相反,即全部添1。

定点运算

定点运算

定点运算定点加法、减法在上篇文章中计算机组成原理:数据与文字的表示方法,我们已经介绍了数的补码表示法,负数用补码表示后,就可以和正数一样来处理。

这样,运算器里只需要一个加法器就可以了,不必为了负数的加法运算,再配一个减法器。

定点数的加法、减法,实际上就是补码加法、减法。

补码加法补码加法运算基本公式:∙定点整数:[x+y]补[x+y]补 = [x]补[x]补 + [y]补[y]补(mod 2n+12n+1)∙定点小数:[x+y]补[x+y]补 = [x]补[x]补 + [y]补[y]补(mod 22)简单来说,只需将符号位和数值部分一起参与运算,并且将符号位产生的进位丢掉即可证明:(1)证明依据:补码的定义若定点整数的补码形式为x = x n xn x n−1xn−1x n−2xn−2……x1x1x0x0(x n x n 为符号位),则补码表示的定义是:(2)证明思路:分三种情况。

1. x、y均为正值(x﹥0,y﹥0)2. x、y一正一负(x﹥0,y﹤0 或者x<0,y>0)3. x、y均为负值(x<0,y<0)证明定点小数的补码加法:(定点整数的证明类似,此处不再证明)1、x﹥0,y﹥0[x]补[x]补 + [y]补[y]补 = x+y = [x+y]补[x+y]补(mod 22)2、x﹥0,y﹤0 (x<0,y>0 的证明与此类似)根据定义[x]补[x]补 = x,[y]补[y]补 = 2+y所以[x]补[x]补 + [y]补[y]补 = x+2+y = 2+(x+y)这个地方要考虑进位的问题。

当x+y>0 时,2+(x+y) > 2 ,进位 2 必丢失;故[x]补[x]补 + [y]补[y]补 = x+y = [x+y]补[x+y]补(mod 2)当x+y<0 时,2+(x+y) < 2 ;故[x]补[x]补 + [y]补[y]补 = 2+(x+y)= [x+y]补[x+y]补(mod 2)3、x<0,y<0根据定义[x]补[x]补 = 2+x,[y]补[y]补 = 2+y所以[x]补[x]补 + [y]补[y]补= 2+x+2+y= 2+(2+x+y)= 2+ [x+y]补[x+y]补(mod 2)= [x+y]补[x+y]补注:不懂mod 2 的可以转至上一篇计算机组成原理:数据与文字的表示方法查看补码的推导定点数补码加法举例补码减法补码减法运算基本公式:∙定点整数:[x−y]补[x−y]补 = [x]补[x]补 - [y]补[y]补 = [x]补[x]补 + [−y]补[−y]补(mod 2 n+12n+1)∙定点小数:[x−y]补[x−y]补 = [x]补[x]补 - [y]补[y]补 = [x]补[x]补 + [−y]补[−y]补(mod 2 2)证明:只需要证明[−y]补[−y]补 = - [y]补[y]补已证明[x+y]补[x+y]补 = [x]补[x]补 + [y]补[y]补故[y]补[y]补 =[x]补[x]补 + [y]补[y]补 - [x]补[x]补 = [x+y]补[x+y]补 - [x]补[x]补又[x−y]补[x−y]补 = [x+(−y)]补[x+(−y)]补 = [x]补[x]补 + [−y]补[−y]补故[−y]补[−y]补 = [x−y]补[x−y]补 - [x]补[x]补可得[y]补[y]补 + [−y]补[−y]补= [x+y]补[x+y]补 + [x−y]补[x−y]补 - [x]补[x]补 - [x]补[x]补= [x+y+x−y]补[x+y+x−y]补 - [x]补[x]补 - [x]补[x]补= [x+x]补[x+x]补 - [x]补[x]补 - [x]补[x]补= 0即证。

定点数的乘法运算

定点数的乘法运算

定点数的乘法运算定点数的乘法运算是计算机科学中的一个重要概念,它在各个领域都有着广泛的应用。

本文将从概念、实现以及应用三个方面进行阐述,以便读者能够全面了解定点数的乘法运算。

一、概念定点数是一种表示数值的方式,它将小数点固定在某个位置上。

定点数的乘法运算是指对两个定点数进行相乘的操作。

在定点数的乘法运算中,需要注意保持小数点的位置不变,并对整数部分和小数部分进行相乘,最后将结果进行合并得到最终的乘积。

二、实现定点数的乘法运算可以通过数学方法来实现,也可以通过计算机程序来实现。

数学方法主要是通过手工计算来完成,而计算机程序则是利用计算机的运算能力来进行计算。

在计算机程序中,定点数的乘法运算通常使用位运算来实现。

位运算是一种对二进制数进行操作的方法,它可以高效地进行乘法运算。

计算机程序中的定点数通常使用固定的位数来表示,例如使用16位来表示定点数的整数部分和小数部分。

在进行乘法运算时,先将两个定点数的整数部分和小数部分进行相乘,然后将结果进行合并得到最终的乘积。

三、应用定点数的乘法运算在计算机科学中有着广泛的应用。

它可以用于图像处理、音频处理、视频编码等领域。

在图像处理中,定点数的乘法运算可以用于图像的缩放、旋转、平移等操作。

通过对图像的像素进行定点数的乘法运算,可以实现图像的变换和处理。

在音频处理中,定点数的乘法运算可以用于音频的滤波、均衡器等操作。

通过对音频信号进行定点数的乘法运算,可以实现音频的增强和修复。

在视频编码中,定点数的乘法运算可以用于视频的压缩和编码。

通过对视频的像素进行定点数的乘法运算,可以减少视频的数据量,从而实现视频的高效传输和存储。

总结:定点数的乘法运算是计算机科学中的一个重要概念,它在各个领域都有着广泛的应用。

本文从概念、实现以及应用三个方面进行了阐述,希望读者能够通过本文对定点数的乘法运算有更加全面的了解。

定点数乘除运算及实现

定点数乘除运算及实现
0﹒ 0 1 1 1 1 0
[X •Y ]补 =0. 011110
所以:
1
实现补码一位乘法的乘法器的逻辑框图如图所示
2
补码两位乘法:是把补码的一位乘法的两个单步操作和并成一个操作。 即:
3
【 (Z i+2)补】=
4
2-2 {【 Z i补】+ (Yn+1 +Yn-2Y n-1) 】 · 【X 】补}
余数<0
商0即q0=0
+ ︱ y ︱
0. 1 1 0 1
——————————
0. 1 0 0 1
左移1位
1. 0 0 1 0
- ︱ Y ︱
1. 0 0 1 1
+[-| y| ]补
——————————
0. 0 1 0 1
余数>0
商1即q1=1
+[-| y| ]补
1. 0 0 1 1
——————————
0. 0 1 1 1
左移1位
0. 1 1 1 0
+[-| y| ]补
1. 0 0 1 1
———————————
0. 0 0 0 1
余数>0
商1即q4=1
所以:商:Q=-0.1011, 余数:R=+0.00012-4
对上述手算计算过程分析得:
(1) 每次都是由心算来比较余数和除数的大小,余数大时,商1; 余数小时,商0。第一次比较时,余数就是被除数。 (2) 每做一次减法,总是保持余数不动,而除数向右移一位。 (3)最后据符号位运算的结果给商以正确的符号
为适应机器运算,需要进行改进: (1) 用减法来比较余数和除数的大小 (2) 除数右移改为余数左移。 (3)定点除法运算必须要求被除数的高n位小于除数,否则益处

定点数运算及数制转换讲解

定点数运算及数制转换讲解
10
“mpy8u”---8位*8位无符号乘法-程序
程序功能: r16 (被乘数)* r17(乘数)→r18:r17。 mpy8u: clr r18 ;清结果高字节 ldi r19,8 ;初始化循环计数器 lsr r17 ;乘数循环 m8u_1: brcc m8u_2 ;进位置位 add r18, r16 ;加被乘数到结果高字节 m8u_2: ror r18 ;结果高字节右循环 ror r17 ;结果低字节和乘数右循环 dec r19 ;循环计数器减 1 brne m8u_1 ;如没完成,再循环 ret
使式:N=n2+є 0≤є<2n+1 成立 这里є为误差,n为N的平方根,计算时,按下式进行:
N=1+3+5+…+(2n-1)+ є=∑(2i-1)+ є 因此,只要从N中依次减去2i-1(i=1,2,…,n),到 不够减时为止,不够减时的减数右移一位即为平方根的整 数部分。
ret
17
§ 4.3.2 “d5tb16” 五位BCD 到16位二进制的转换
(1)程序功能: 将个、十、百、千和万位分别放在 r16、r17、r18、r19和r20中的五位BCD码,转换为16 位二进制数,存放于r17:r16中。
转换公式为: r17:r16 =
r16+10*r17+100*r18+1000*r19+10000*r20
§4 定点数运算及数制转换程序设计
定点数:是小数点固定的数。 分为:整数、小数、混合小数等。
小数或混合小数:可以用整数乘以10-n或2-n来表示。 例:十进制数12.56=1256*10-2
十六进制数1A.F8=1AF8*16-2 因此,可以将定点数先按整数运算,最后再考虑小数点 的位置。本节主要讲解整数运算及数制转换程序。

计算机组成原理第2章-定点数的运算

计算机组成原理第2章-定点数的运算

下式也同样成立:
同样:[X-Y] 变补=[X] 变补+[-Y] 变补 [X+Y]变补= [X]变补+[Y]变补 (mod 4)
12/25/2019
为了得到两数变形补码之和等于两数之和的变形补码,同样必须:
1. 两个符号位都看作数码一样参加运算
2. 两数进行以4位模的加法,即最高符号位上产生的进位要丢掉。
[y]变补=11.1000
两个符号位出现“10”,表示已溢出,即结果小于-1。
由此可以得出如下结论: 1. 当以模4补码运算,运算结果的二符号位相异时,表示溢出;相同时,表 示未溢出。故溢出逻辑表达式为 V=Sf1⊕Sf2,其中Sf1和Sf2分别为最高符 号位和第二符号位。此逻辑表达式可用异或门实现。 2. 模4补码相加的结果,不论溢出与否,最高符号位始终指示正确的符号。
上式右边分为”2”和(2+x+y)两部分.既然(x+y)是负数,而其 绝对值又小于1,那么(2+x+y)就一定是小于2而大于1的数,进位”2” 必丢失.又因(x+y)<0, 所以
[x]补+[y]补=2+(x+y)=[x+y]补
(mod 2)
至此我们证明了,在模2意义下,任意两数的补码之和等于该两数之和

[x]补=x,
[y]补=2+y

[x]补+[y]补=x+2+y=2+(x+y)
12/25/2019
当x+y>0时,2 + (x+y) > 2,进位2必丢失,又因(x+y)>0,
故 [x]补+[y]补=x+y=[x+y]补
(mod 2)
当x+y<0时,2 + (x+y) < 2,又因(x+y)<0,
采用变形补码后,如果两个数相加后,正数的符号位为00,负数的符号位为 11,其结果的符号位出现“01”或“10”两种组合时,表示发生溢出。这是因为 两个绝对值小于1的数相加,其结果不会大于或等于2,所以最高符号位永远表示结 果的正确符号。

定点数运算及数制转换

定点数运算及数制转换

16
§ 4.3.1 “b16td5”——程序清单
ser r17 ; r17先送-1;求十位,放在r17中
b16td5_4:
inc r17
;r17增1
subi r16,10
;(r17:r16)-10
brcc b16td5_4
;够减则返回b16td5_4
subi r16,-10;不够减+10,恢复余数,即个位。
tst r18 ;测试r18
rjmp d5tb16_4 d5tb16_3: subi r16,low(-100)
;加r18次100
sbci r17,high(-100)
dec r18 ;r18减1
d5tb16_4: brne d5tb16_3
;非0转d5tb16_3
19
“d5tb16” ----程序清单:
b16td5_1 ;够减则返回b16td5_1
subi r16,low(-10000) ; 减过头,不够减+10000,
sbci r17,high(-10000);恢复余数
ser r19 ;r19先送-1;求千位,放在r19中
b16td5_2:
15
§ 4.3.1 “b16td5”——程序清单
b16td5_2: inc r19 ;r19增1 ;求千位,放在r19中
程序功能: r17:r16*r19:r18→r21:r20:r19:r18 。
5
§ 4.2.1 乘法运算子程序
4.2.1.4“mpy16s”——16*16位带符号乘法 程序功能: r17:r16*r19:r18→r21:r20:r19:r18 。
4.2.1.5“mpy32u”——32位*32位无符号乘法 程序功能:r19:r18:r17:r16*r23:r22:r21:r20 → r27:r26:r25:r24:r23:r22:r21:r20。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
11
“mpy8s”: 8位*8位带符号乘法-布斯(Booth)算法
设X*Y, Y= yn … y2yl y0,根据两个数据位yi与yi -1的值的情 况进行加法、减法还是仅仅移位操作,即判断的两个数据位为 当前位及其右边的位(初始时需要增加一个辅助位y -1 =0). 00:移位; 10:移位,减法; 11:移位; 01:移位,加法。 例:计算 (-3) × 2 的过程(设是4位补码数)
§4 定点数运算及数制转换程序设计
定点数:是小数点固定的数。 分为:整数、小数、混合小数等。 小数或混合小数:可以用整数乘以10-n或2-n来表示。 例:十进制数12.56=1256*10-2 十六进制数1A.F8=1AF8*16-2 因此,可以将定点数先按整数运算,最后再考虑小数点 的位置。本节主要讲解整数运算及数制转换程序。
14
§ 4.3.1 “b16td5”——程序清单
b16td5: ser r20 ;r20先送-1,计数器预减1 b16td5_1: ;求万位,放在r20中 inc r20 ;r20增1 subi r16,low(10000) ;(r17:r16)-10000 sbci r17,high(10000) brcc b16td5_1 ;够减则返回b16td5_1 subi r16,low(-10000) ; 减过头,不够减+10000, sbci r17,high(-10000);恢复余数 ser r19 ;r19先送-1;求千位,放在r19中 b16td5_2:
程序功能:
将(r17:r16)中16位二进制转换成BCD码,
个、十、百、千和万位分别 存放于r16、r17、r18、r19和r20中 。 程序思想: (r17:r16)-10000够减X次,则万位为X; 差值-1000够减Y次,则千位为Y; 差值-100够减Z次,则百位为Z; 差值-10够减U次,则十位为U; 差值为个位。
16
§ 4.3.1 “b16td5”——程序清单
ser r17 ; r17先送-1;求十位,放在r17中 b16td5_4: inc r17 ;r17增1 subi r16,10 ;(r17:r16)-10 brcc b16td5_4 ;够减则返回b16td5_4 subi r16,-10;不够减+10,恢复余数,即个位。 ret
10
“mpy8u”---8位*8位无符号乘法-程序
程序功能: r16 (被乘数)* r17(乘数)→r18:r17。 mpy8u: clr r18 ;清结果高字节 ldi r19,8 ;初始化循环计数器 lsr r17 ;乘数循环 m8u_1: brcc m8u_2 ;进位置位 add r18, r16 ;加被乘数到结果高字节 m8u_2: ror r18 ;结果高字节右循环 ror r17 ;结果低字节和乘数右循环 dec r19 ;循环计数器减 1 brne m8u_1 ;如没完成,再循环 ret
5
§ 4.2.1 乘法运算子程序
4.2.1.4“mpy16s”——16*16位带符号乘法 程序功能: r17:r16*r19:r18→r21:r20:r19:r18 。 4.2.1.5“mpy32u”——32位*32位无符号乘法 程序功能:r19:r18:r17:r16*r23:r22:r21:r20 → r27:r26:r25:r24:r23:r22:r21:r20。
8
§ 4.2.2 除法运算子程序
4.2.2.7“div32u”——32位/32位无符号除法 程序功能: (r19:r18:r17:r16)/( r23:r22:r21:r20) → r19:r18:r17:r16 (商) , r27:r26:r25:r24 (余数) 。 4.2.2.8“div32s”——32位/32位带符号除法 程序功能: (r19:r18:r17:r16)/(r23:r22:r21:r20) → r19:r18:r17:r16 (商) , r27:r26:r25:r24 (余数) 。
17
§ 4.3.2 “d5tb16” 五位BCD 到16位二进制的转换
(1)程序功能: 将个、十、百、千和万位分别放在 r16、r17、r18、r19和r20中的五位BCD码,转换为16 位二进制数,存放于r17:r16中。
转换公式为: r17:r16 = r16+10*r17+100*r18+1000*r19+1003.3“yd5tb16” 五位压缩BCD 到16位二进制转换
(1) 程序功能: 将五位压缩BCD码转换为 16位 二进制。五位压缩BCD码存于r18:r17:r16(r18 高四位为0),转换结果二进制数存放于 r17:r16。 (2) 程序思想:先将压缩BCD码转换为分离的 BCD码放到r16(个)、r17(十)、r18(百)、 r19 ( 千 ) 、 r20 ( 万 ) 五 个 字 节 中 , 再 调 用 d5tb16子程即可。
3
§ 4. 2 乘除运算子程序
AT90S8535单片机没有乘法和除法指令。 可以编程实现,基本思路如下: 二进制数无符号乘法:用移位加法来实现; 无符号除法:用移位减法来实现。 而对有符号数则对符号位单独考虑。
教材列出的乘除运算子程有: 8 ,16 ,32 位带符号数、无符号数的运算子程。
9
乘法运算子程序设计思想
算法的基本原理可参考《计算机组成原理》等相关的书或 文献。 关键是如何运用,要善于站在别人的肩膀上。 下面主要讲解两个。 4.2.1.1“mpy8u”——8位*8位无符号乘法 程序功能: r16 (被乘数)* r17(乘数)→r18:r17。
4.2.1.2“mpy8s”——8位*8位带符号乘法 程序功能: r16 (被乘数)*r17(乘数)→r18:r17。
4.2.1.6“mpy32s”——32位*32位带符号乘法 程序功能:r19:r18:r17:r16*r23:r22:r21:r20 → r27:r26:r25:r24:r23:r22:r21:r20。
6
§ 4.2.2 除法运算子程序
4.2.2.1“div8u”——8位/ 8位无符号除法 程序功能: r16 (被除数)/ r17(除数) 结果→ r16 (商),r15(余数)。 4.2.2.2“div8u”——8位/ 8位带符号除法 程序功能: r16 (被除数)/ r17(除数) →r16 (商) ,r15(余数)。
另外,定点数又可分: 1. 无符号数--明确为正数的数,其符号省略了; 2. 带符号数--可能是正数、也可能是负数, (以补码表示,最高位为符号位)。
1
主要内容
§ 4. 1 加减运算程序 ; § 4. 2 乘除运算子程序 ; § 4. 3 数制转换子程序 ; § 4. 4 开方运算程序设计。
2
§ 4. 1 加减运算程序
4
§ 4.2.1 乘法运算子程序
4.2.1.1“mpy8u”——8位*8位无符号乘法 程序功能: r16 (被乘数)* r17(乘数)→r18:r17。 4.2.1.2“mpy8s”——8位*8位带符号乘法 程序功能: r16 (被乘数)*r17(乘数)→r18:r17。 4.2.1.3 mpy16u--16*16位无符号乘法 程序功能: r17:r16*r19:r18→r21:r20:r19:r18 。
18
“d5tb16” ----程序清单:
d5tb16: ;r16+r17*10 tst r17 ;测试r17 rjmp d5tb16_2 d5tb16_1: subi r16,-10 ; 加r17 次10 dec r17 ;r17减1 d5tb16_2: brne d5tb16_1 ;非0转d5tb16_1 tst r18 ;测试r18 rjmp d5tb16_4 d5tb16_3: subi r16,low(-100) ;加r18次100 sbci r17,high(-100) dec r18 ;r18减1 d5tb16_4: brne d5tb16_3 ;非0转d5tb16_3
4.2.2.3“d16v8u”——16位/ 8位无符号除法 程序功能: (r16:r15)/ r17 →r16(商) ,r15(余数)。
7
§ 4.2.2 除法运算子程序
4.2.2.4“div16u”——16位/ 16位无符号除法 程序功能:(r17:r16)/(r19:r18) →r17:r16 (商) ,r15:r14 (余数)。
15
§ 4.3.1 “b16td5”——程序清单
b16td5_2: inc r19 ;r19增1 ;求千位,放在r19中 subi r16,low(1000) ;(r17:r16)-1000 sbci r17,high(1000) brcc b16td5_2 ;够减则返回b16td5_2 subi r16,low(-1000) ;不够减+1000,恢复余数 sbci r17,high(-1000) ser r18 ; r18先送-1 ;求百位,放在r18中 b16td5_3: inc r18 ;r18增1 subi r16,low(100) ;(r17:r16)-100 sbci r17,high(100) brcc b16td5_3 ;够减则返回b16td5_3 subi r16,low(-100) ;不够减+100,恢复余数 sbci r17,high(-100)
19
“d5tb16” ----程序清单:
tst r19 ;测试r19 rjmp d5tb16_6 d5tb16_5: subi r16,low(-1000) ; 加r19次1000 sbci r17,high(-1000) dec r19 ;r19减1 d5tb16_6: brne d5tb16_5 ;非0转d5tb16_5 tst r20 ;测试r20 rjmp d5tb16_8 d5tb16_7:subi r16,low(-10000) ; 加r20次10000 sbci r17,high(-10000) dec r20 ;r20减1 d5tb16_8:brne d5tb16_7 ;非0转d5tb16_7 ret
相关文档
最新文档