计算机组成原理 - 定点整数的原码补码运算(待验证)

目录

〇、环境

对象

运算

定点整数原码、定点整数补码

移位、加、减、乘、除

原码定义:

\(x=\begin{cases}

x &0\le x < 2^{n}

\\2^{n}-x &-2^{n} < x \le 0

\end{cases}\)

其中,n为x的位数,最终原码有n+1位。

定义分析:当真值为正时,原码即为真值的二进制形式,但是在二进制最高位添加一个0作为符号位(定义没有体现)。当真值为负时,去掉原码二进制形式的负号,在二进制最高位添加一个1作为符号位。

伸展和收缩:由定义分析可知,x宽度变化时,非符号部分添加或移除高位0(也即整数的二进制形式调整宽度),符号部分不变。在形式上,无论正负,都是在最高位新增或移除0。

例0-1 求\(11_b\)的8位原码表示

解:为011,扩展到8位为0000 0011。

例0-2 求\(-11_b\)的8位原码表示

解:100-(-11)=111,扩展到8位为0000 0111。

补码定义:

\(x=\begin{cases}

x &0\le x < 2^n

\\2^{n+1}+x &-2^n \le x < 0

\end{cases}\)

其中n为x的位数,最终有n+1位(去掉一定为0的最高位)。

定义分析:当真值为正时,保留真值的二进制形式,并在最高位添加一个0作为符号位。当真值为负时,则与10...0(共n+2位)相加,联系反码的特点,即将真值负号移除后每位取反,然后加1,然后最高位添加1作为符号位。

伸展与收缩:由定义分析,当真值为正时,则和原码一致,添加0即可。当为负时,扩展添0,取反后则为添1,加1时不会影响扩展位(因为负值的二进制形式必不全为0),最后保持符号位不变。形式上,正值在最高位添加和删除0,负值扩在最高位添加和删除1。

例0-3 求11的8位补码表示

解:为011,扩展到8位为0000 0011。

例0-4 求-11的8位补码表示

解:为1000-11=0101,即101,扩展到8位为1111 1101。

还可以利用性质来求:^11=00,00+1=01,添加符号位即101。

一、移位运算

移位的数学意义为乘2和除2。

1.算术移位

识别符号的移位,符号位不变。

编码

机器数(真值)

算术左移(真值)

算术右移(真值)

原码

0001(1)

0010(2)

0000(0)

原码

0100(4)

0000(0)

0010(2)

原码

1001(-1)

1010(-2)

1000(-0)

原码

1100(-4)

1000(-0)

1010(-2)

补码

1001(-7)

1010(-6)

1100(-4)

补码

1100(-4)

1000(-8)

1010(-6)

2.逻辑移位

不识别符号的移位。

3.移位总结

对于原码和补码,算术移位和逻辑移位,左移和右移,仅有负数的补码形式在右移时填充1,其余均为填0。

对于正数、原码负数,左移掉1则引起错误,右移掉1则引起偏差。

对于补码负数,左移掉0则引起错误,右移掉0则引起偏差。

二、加法和减法

1.原码加、减法

直接根据符号位进行加减即可。将符号位提取出来,然后转换成“正值+正值”或者“正值-正值”的形式。

参数1(真值)

参数2(真值)

运算

结果(真值)

0100(4)

0001(1)

+

0101(5)

0100(4)

1001(-1)

+

0011(3)

2.补码加法

若有 \(A>0,B>0\) , 则

\([A]_补=A,[B]_补=B,\)即 \([A]_补+[B]_补=A+B=[A+B]_补\)。

若有 \(A>0,B<0\) ,则

\([A]_补=A,[B]_补=2^{n+1}+B,[A+B]_补=(A+B)或2^{n+1}+(A+B)\) ,即 \([A]_补+[B]_补=[A+B]_补(mod\space2^{n+1})\)

其它情况类似,不重复。

即补码加法公式:

\[[A+B]_补=[A]_补+[B]_补\space(mod\space2^{n+1})

\]

公式说明:

右边的加法为二进制加法,不考虑符号位。相加后去掉溢出位,即得到补码加法的结果(当然也是补码形式)。也即两个真值的补码直接相加即得两个真值的和的补码(宽度不变)。

例2.2-1 计算 \(0001_补+1111_补\) 。

解:\(0001+1111=1,0000\),去掉溢出位,即结果为 \(0000\) 。

例2.2-2 计算 \(1111_补+1110_补\) 。

解:\(1111+1110=11101\),去掉溢出位,即结果为 \(1101\)

3.补码减法

将减法转换为加法进行运算。

因为 \(A-B=A+(-B),(B>0)\) ,

即 \([A-B]_补=[A+(-B)]_补\) ,

即补码的减法公式 $$[A-B]_补=[A]_补 + [-B]_补\space(mod\space 2^{n+1})$$

其中 \([-B]_补=\text{\textasciicircum}[B]_补+1\) 。^表示按位取反。

例2.3-1 计算 \(1111_补-0001_补\) 。

解:\(\text{\textasciicircum}[0001]+1=1110+1=1111,故1111-0001=1111+1111=11110\) ,去掉溢出位,结果为\(1110\)。

三、乘法

1.原码乘法

将符号位分离,单独计算正值的乘法,最后将符号计算并赋予结果。

正值的乘法和十进制乘法基本一致,在逻辑上表现为部分积累加并移位。

例3.1-1 计算 \(0011_原\times0010_原\) 。

解:直观结果为3x2=6=0110。

原码乘法计算过程:

\[\begin{aligned}

&0011

\\\times\space&0010

\\&0000

\\0&011

\\=\space0&0110

\end{aligned}

\]

例3.1-2 计算 \(0111_原\times0111_原\) 。

解:直观结果为7x7=49=00110001。

原码乘法计算过程:

\[\begin{aligned}

&0111

\\\times\space&0111

\\&0111

\\0&111

\\01&11

\\=\space11&0001

\end{aligned}

\]

2.补码乘法

先讨论补码乘法乘数为正的情况。

对 \([X]_补\times[Y]_补\) ,假设 \(Y>0\) ,则有

\([X]_补=2^{n+1}+X\space(mod\space 2^{n+1}),[Y]_补=Y\)

\([X]_补\times[Y]_补=(2^{n+1}+X)\cdot Y\space(mod\space2^{n+1})

\\=X\cdot Y\space(mod\space2^{n+1})

\\=[X\cdot Y]_补\space(mod\space2^{n+1})\)

这说明,当 \(Y\) 为正时,补码的乘法即为各自补码直接二进制乘法的结果(去除溢出位)。

例3.2-1 计算 \(1111_补\times0011_补\) 。

解:直观结果为(-1)x(3)=-3=1101。

\[\begin{aligned}

&1111

\\\times\space&0011

\\&1111

\\1&111

\\=\space10&1101

\end{aligned}

\]

去除溢出位即为 \(1101\)

再讨论乘数为负的情况。

此时有 \([Y]_补=2^{n+1}+Y\) ,也即 \(Y=[Y]_补-2^{n+1}\) 。

即 \(X\cdot Y=X\cdot ([Y]_补-2^{n+1})\) 。

记 \([Y]_补=1y_1y_2...y_n=0y_1y_2...y_n+2^n\) 。

则 \(X\cdot Y=X\cdot(0y_1y_2...y_n-2^{n})

\\=X\cdot 0y_1y_2...y_n-X\cdot 2^n\) 。

即 \([X\cdot Y]_补=[X\cdot 0y_1y_2...y_n-X\cdot 2^n]_补\)

由补码减法公式,分解右式,有

\([X\cdot Y]_补=[X\cdot 0y_1y_2...y_n]_补+[-X\cdot 2^n]_补\space(mod\space2^{n+1})\)

记 \(X=x_1x_2...x_n\) ,则 \([-X\cdot 2^n]_补=[-x_1x_2...x_n0_10_2...0_n]_补

\\=1\text{\textasciicircum}(x_1x_2...x_n)1_11_2...1_n+1

\\=x_n0_10_2...0_n

\\=x_n\times2^n\space(mod\space2^{n+1})\)

\(0.y_1y_2...y_n\) 是一个补码形式的正数,可应用补码正乘数规律进行分解。故

\([X\cdot Y]_补=[X]_补\cdot 0y_1y_2...y_n+x_n\times2^n\space(mod\space2^{n+1})\)

也即如果乘数为负,则将乘数去掉符号位与被乘数二进制相乘,然后加上 \(x_n\times2^n\) 即得乘积的补码。

例3.2-2 计算 \(0011_补\times1110_补\) 的8位补码表示

解:直观结果为 \(3\times(-2)=-6=1010\)

解法:

\(x_n\times2^n\)=1000

\[\begin{aligned}

&0011

\\\times\space&0110

\\0&011

\\00&11

\\=\space01&0010

\\+\space&1000

\\=\space01&1010

\end{aligned}

\]

保留4位为 \(1010\),扩展到8位为 \(1111\space1010\)。

例3.2-3 计算 \(1110_补\times 1110_补\) 的8位补码表示

解:直观结果为 \(-2\times-2=4=0100=0000,0100\)

解法:

\(x_n\times2^n=0\)

\[\begin{aligned}

&1110

\\\times\space&0110

\\1&110

\\11&10

\\=\space101&0100

\\+\space&0000

\\=\space101&0100

\end{aligned}

\]

保留4位为0100,扩展到8位为 \(0000,0100\) 。

总结:

\[[X\cdot Y]_补=

\begin{cases}

[X]_补\times[Y]_补\space(mod\space2^{n+1}) &Y\ge0

\\ [X]_补\cdot 0y_1y_2...y_n+x_n\times2^n\space(mod\space2^{n+1}) \space &Y<0

\end{cases}

\]

记 \(Y=y_0y_1y_2...y_n\),则可以简化为

\[[X\cdot Y]_补=[X]_补\cdot 0y_1y_2...y_n+y_0\cdot x_n\times2^n\space(mod\space2^{n+1}) \space

\]

标签:...,space,cdot,补码,1111,定点,原码

来源: https://www.cnblogs.com/amazzzzzing/p/14039627.html

计算机组成原理整数乘法,计算机组成原理 - 定点整数的原码补码运算(待验证)...相关推荐

  1. 计算机组成原理:原码,补码,反码,移码

    无符号数 寄存器的位数反映和决定无符号数的表示范围 比如八位的寄存器就只能储存十进制的0-255 有符号数 机器数与真值 在计算机当中没有硬件表示小数点的位置,而小数点的位置是我们自己约定的, 小数的 ...

  2. 计算机组成原理之 原码 补码 反码

    原码 补码 反码 前言 一.有符号数 1.1原码 补码 反码 总结 前言 在计算机中一般使用二进制表示各个有理数.在计算机中参与运算的数有两大类:有符号数和无符号数.无符号数就是没有符号的数,在寄存器 ...

  3. 原码除法运算(计算机组成原理19)

    原码除法运算 视频链接地址: https://www.bilibili.com/video/BV1BE411D7ii?from=search&seid=6420326887479343502 ...

  4. 计算机组成原理学习笔记:定点数、浮点数、原码、反码、补码、移码

    定点数与浮点数 所谓定点数就是指小数点的位置固定不变 而浮点数是小数点的位置是不固定的,会浮动 1 ) 定点数 用熟悉的十进制数来类比,定点数就是我们平时更习惯使用的常规的计数方式,我们会显式的标明小 ...

  5. 计算机原码补码和反码的计算方法,一个数的原码,反码,补码怎么算,原码 反码 补码...

    数在计算机中是以二进制形式表示的. 数分为有符号数和无符号数. 原码.反码.补码都是有符号定点数的表示方法. 一个有符号定点数的最高位为符号位,0是正,1是副. 以下都以8位整数为例, 原码就是这个数 ...

  6. 【计算机组成原理】定点乘法运算之原码两位乘法

    讨论x * y = z 采用原码两位乘法,已知x和y,如何求得z 原码两位乘法和原码一位乘法一样,符号位不参加运算 部分积和被乘数x均采用三位符号,乘数y末位每次要加一个c,c一开始是0 根据如下法则 ...

  7. 计算机组成原理——基本组成 进制转化 奇偶校验 原码 反码 补码 移码 移位 原码补码乘法除法 IEEE754 加法器ALU

    笔记来源于王道考研视频 第一章 通过电信号传递信息(低电平代表0,高电平代表1) 计算机系统 计算机系统=硬件+软件 软件 系统软件 应用软件 操作系统,数据库管理系统(DBMS),标准程序库(编程时 ...

  8. (计算机组成原理)第二章数据的表示和运算-第二节5:定点数乘法运算(原码/补码一位乘法)

    文章目录 一:乘法运算基本思想 二:原码一位乘法 (1)实现原理 (2)手算模拟 三:补码一位乘法( B o o t h Booth Booth

  9. java部分基础知识 (二):计算机组成原理 原码 补码 反码 按位符 移位符 按位与 按位或 按位抑或 非 分析hashMap的put方法原理

    这里写目录标题 引言 符号位 正数的二进制计算 负数的二进制计算 按位符和移位符 按位符 移位符 分析hashMap运算符 byte和char 总结 引言 最近做完一个项目后,我忽然发现自己的基础并不 ...

最新文章

  1. 树莓派 ROS 段错误
  2. Ubuntu中的超级兔子:Tweak安装教程
  3. 创建一个 Django 项目
  4. Git代码管理常用命令操作
  5. java soap 头_如何在Java中添加Soap标头
  6. iOS一次定位解决方案(基于高德iOS SDK)
  7. tomcat 在WIN10 上运行出现500错误的解决方法
  8. 设计模式--适配器(Adapter)
  9. 多媒体分析与理解_多媒体在课堂教学中应用的研究研究报告(二)
  10. Hadoop HA集群部署
  11. 资源分配博弈之纳什均衡和斯塔克尔伯格模型
  12. 学习日记day25 平面设计 综合例子
  13. 制作精良、功能强大、毫秒精度、专业级的定时任务执行软件功能详解 —— 定时执行专家
  14. 载入模型部分权重的方法
  15. 【R语言】常用基本函数
  16. 在线教育机构如何运营微信公众号
  17. vue实现词云图(echarts/Highcharts)
  18. pages文件夹 AddCartSuccess Center Detail Home Login Pay PaySuccess
  19. less中的变量 单位问题
  20. .NET框架体系结构(一部分)

热门文章

  1. python写入csv文件的几种方法
  2. 华为云发布全新DevOps实践,大幅提升交付效率
  3. spring框架使用Quartz执行定时任务实例详解
  4. django性能优化缓存view详解
  5. Git 分布式版本管理
  6. keepalived高可用反向代理的nginx
  7. 安卓模拟器BlueStacks 安装使用教程(图解)
  8. 【Ubuntn】Ubuntu随笔
  9. 如何手工删除AD RMS SCP?
  10. 2、Reactive Extensions for .NET(译)