计算机组成:数制与运算

数制

注意,补码只是说能让符号位参与运算,并不能让它也同时表示数的大小,理解上不要有偏差

原码表示法


注意这个逗号是用来分割符号位和数值位的,和后面的小数定点机的小数点要区分开,虽然作用是一样的,都是分割符号位

补码表示法


取反加一同样适用于小数的补码


x的相反数是0.1100000,取反为1.0011111,加一是在末尾加一,结果是1.0100000

移码表示法

使用移码的原因:补码很难直接判断其真值大小


对正数和负数做同样的处理

从数轴上看:


移码通常用来表示浮点数的阶码部分,所以没有小数定义,主要就是图它大小好判断

移码和补码的比较


数的定点表示

在计算机中,没有专门的硬件用来表示小数点,小数点的位置是计算机体系结构设计人员在设计体系结构时约定的


小数定点机只能表示不到[-1,1]的数字,而整数定点机只能表示正负整数

关于取值范围,有这样的解释:

来源:https://www.zhihu.com/question/50758554

一个数用(n+1)位存储,原码(反码)用掉一个符号位后,还有n位,如果小数点在最右边,此时表示的是整数,可表示 这些数,把小数点左移n位,相当于除以 ,结果为:

同理,补码可表示的整数是 ,除以 ,结果为:

这样就可以看明白了,对于小数定点机,由于其数符位是用来表示正负的,所以正数最大就是0.11111111,负数最小就是1.0000000

关于原码、补码和反码的计算:

蓝色是整数定点机,黑色是小数定点机

来源:https://blog.csdn.net/qq_39690706/article/details/85856792

原码
原码的表示方法:

注意,这里2的n次方减去X,是为了让它的符号位为1

简单来说就是,在机器中我们使用0和1来区分一个数的符号,用0来表示正数,用1来表示负数。而原码表示就是将一个数绝对值的二进制表示出来后根据是正数还是负数在前面加0或1表示数的符号。这里注意一点,在定点小数中,原码是不能表示出-1这个值的

反码
反码的表示方法

简单易懂一些的话其实就是如果是正数,X的反码就等于原码,如果是负数,将X的数值位全部取反

补码

定点运算

补码的减法


一个数的负数的补码等于该数的补码取反再加一

原码乘法

这里说的原码运算是可以带符号的

上面的符号位操作是异或


例子:


移位都是逻辑移位,也就是直接在前面用0补,而不是循环的


补码乘法

注意这里用的都是小数定点机



所以说,如果Y0是0的话,补码的运算就可以按照原码的计算方法来(因为后面那个-X项就是0了),但是如果Y0是1,也就是说Y是个负数的话,补码的运算方式就不能简单地照搬无符号数的移位-相加方式,需要在前面使用移位-相加且不计算Y的符号位的基础上,最后加上一个-X的补码,这也就是所谓矫正法

同时,这个结论也说明了一点,就是补码乘法和原码乘法的区别在于除数而不是被除数,对于被除数,无论是原码还是补码,处理方法是一样的

证明如下:


注意这里,由于mod运算,2的n+1次方和2是一样的



Booth算法





艹,我觉得这个比PolyU老师讲的明白多了

原码除法

原码除法的笔算示例:


如果左移一位的余数大于除数,就上商1



x0和y0之间进行的是异或操作

这里说的小数,它们的整数位都是0,也就是说它们都是小于1的

所以说,如果小数定点除法的小数部分除法结果大于1,直接报错就好,因为不符合约定了

  • 恢复余数法


我们这里假设机器字长为5位

每次左移,就把商也同时左移,这样商从结果上来看就是从高到低进行的了,这样计算过程和笔算就完全一致了

  • 不恢复余数法


先减去,再判断要上商0还是1,在分别做对应的操作,然后再判断


补码除法

补码的除法是在原码的不恢复余数的除法的基础上改进而成的


两个数要是同号的话每次就是减,否则就是加;如果商和除数是同号的话,说明不够减,此时上商要上反码,也就是不够减的时候反而上1、够减的时候反而上0;注意这里用的是反码,所以最后需要矫正为补码

而同号和异号的操作其实是可以统一的,这一点要见上图的最后一栏,同号和异号的区别仅仅是在加和减上,他们的上商结果也是一致的:够减,也就是同号,上1;不够减,也就是异号,就上0:


那么,如何确定商的符号呢?

商的符号为的计算要单独讨论,是因为这时是处于计算的开始阶段,是没有余数的,方法一可以看为是开始计算、创造一个原始的余数,而方法二是直接将被除数当成余数




如果同号,减完了符号位就是0;异号的话加完了符号位就是1


注意,这里说的只涉及到符号位,所以使用方法二之后只需要将符号位取反就好了


符号位是反着的,所以加上1就可以使得符号位取反(可能有溢出,溢出的就被忽略了)

浮点数

使用原因

科学计算需要,只使用定点的话需要手动调整;并且定点数的表示范围小


r如果取2,那么尾数移动一位,阶码改变一位;r如果取4,那么尾数移动两位,阶码改变一位

规格化数:尾数的小数点后第一位为非0

注意阶码是用二进制数表示的


阶符:表示阶码的正负


注意这里说的不包括0,也就是尾数全为0、数符是0或者1(IEEE标准规定正负零是相等的)的情况


例如:

浮点数的规格化形式

原因是尽可能地保持浮点数的精度


注意这里讲的和PolyU课件上的规定不一样,那里的规定是,默认r=2,然后由于尾数最高位一定是1,所以这个1就不存了,所以它规格化的标准也不一样(这个其实是IEEE754的标准):




注意,对于阶码和尾数的正负表示是分开的


浮点运算

浮点运算的要求是,base必须是一样的

阶码不同的话,需要进行调整

对阶的过程中,数据位可能会出现数据丢失(因为数据位的最大长度是有限的),数据丢失最好是右侧丢失,所以最好采用低位向高位对齐的方式


例如:

规格化


但是是有特例的:


对于-1/2,需要单独对其进行规格化

-1没有源码,但是有补码

如何进行规格化


舍入

乘除法

看https://wenku.baidu.com/view/c1416473f46527d3240ce0b1.html

原文地址:https://www.cnblogs.com/jiading/p/12240870.html

时间: 2024-10-11 07:29:26

计算机组成:数制与运算的相关文章

计算机数制和运算的一点总结.

一.为什么会有10进制, 2进制,8进制,16进制? 10对我们来说是一个非常重要的数字.10是我们大多数人拥有的手指或脚趾的数目,因而我们人类已经适应了以10为基础的数字系统. 我们通常使用的数字系统称为以10为基础的数字系统或十进制.这个数字系统对我们来说非常自然,因而我们很难想像出还有其他的数字系统.如果人类不是有那么多只手指,我们数数的方式就会有所不同,数字10就可能代表别的东西了.当我们明白了10可以指只有两只鸭子的时候,也就可以解释开关.电线.灯泡.继电器(或干脆就叫计算机)是怎样表

计算机中的位运算

位运算是C/C++中的基本运算之一,即便是这样,它对大多数程序员来说是一个比较陌生的运算——大多数程序员很少使用位运算.本篇先简要介绍基本的位运算操作符及其用法(何时使用),然后介绍位运算符的几个典型应用: (1)      三种不用临时变量交换两个整数的实例,并分析每个实例的优缺点 (2)      进制转换,通过位运算实现将十进制数按二进制和十六进制输出,并得出一个通用的,用于将十进制按照2的n次方进制输出的程序. (3)      给出利用位运算实现的计算整数的二进制表示中有多少个1的实例

计算机组成.计算机在计算啥.运算与ALU

突然发现在iPad的网页上也可以写博客哎,,这样就不用背着厚重的笔记本了 写了两句就发现,在输入状态下文本编辑窗口只能保持在最高,,,这样就被虚拟键盘挡住了,,,体验-1 再写两句发现又好了,,,体验+1 我所认为的计算机的运算,无非就是"算数",除了传统的加减乘除外,在二进制的表示下,还有逻辑运算与移位运算. 而计算机真正的魅力在于,可以算得很快,所以承受得住我们去对每一个运算所赋予的详细含义,在各种含义下的运算互相碰撞着,也就干成了各种各样的事情. 二进制的逻辑运算对应与数学上的二

计算机组成原理基础知识-运算方法

五.计算机的运算方法 --在计算机中参与运算的数有两大类:无符号数和有符号数 无符号数:没有符号的数 有符号数 机器数与真值:机器中:0表示正,1表示负 原码表示法:把真值的正负用01表示 补码表示法:真值为正时,与原码相同,真值为负时,补码是原码的"求反加一" 反码表示法:真值为正时,与原码相同,真值为负时,补码是原码的"每位求反" 移码表示法:同一个真值的移码和不忙吗只差一个符号位 --表示小数点的存在:定点表示和浮点表示 --定点运算:移位运算.加法与减法运算

【计算机组成原理】定点数运算

定点数加减运算 补码加法: 负数用补码表示后,可以和正数一样去处理 当需要减去一个数x的时候,可以用加上x对应的负数的补码[-x]补来代替 [x]补+[y]补=[x+y]补 补码减法 [x-y]补=[x]补+[-y]补(mod 2) [x-y]补=[x]补+[-y]补 (mod 2的n+1次方) 补码基本规则: 运算的各个操作数均用补码表示,运算结果仍是补码 符号位和数值位一样参加运算 如果求和,则将两补码直接相加,得到两数之和的补码,若求差,则将减数变补([y]补变[-y]补),然后和被减数相

计算机基本颜色以及运算

三原色表示法:红光.蓝光.黄光. 用一个向量表示一个颜色:A =[r,g,b],颜色B=[a,b,c] 加法:两个颜色合成一个颜色 合成颜色Z =[a+r,b+g,c+b] 减法:与加法相反 标量乘法:让颜色整体变色 点积和叉积:对于颜色没有任何意义 分量乘法:结果为Z =[r*a,g*b,c*b],用于计算材质吸收光后,反射出的光线颜色. 原文地址:https://www.cnblogs.com/leiGameDesigner/p/8372813.html

计算机组成.就是它在运算.处理器CPU

处理器是要好好复习了,毕竟考试重点 主要的内容感觉还是在指令方面,包括指令的格式.指令集的设计.指令流水线.指令级并行. 东西慢慢整理吧,如果一边在网上搜索的估计会找到很多资料,但是耗费的时间太多了 国内的教材虽然有一定的局限性,但是tm的要考试啊 我觉得需要考试的人不止我一个,,,,,, 处理器的组成与功能 先给一张处理器的概念图,未必很严谨,而且各种处理器的实现方式也不尽相同,但基本的原理其实都在图里可以体现 组成 大规模集成电路技术的发展,使得芯片的密集程度越来越高,处理器内部的各个结构甚

[C++基础]原码/反码/补码、二进制位运算

原码/反码/补码 编码 定义 实例 原码 最高位为符号位,"0"表示正,"1"表示负,其余位表示数值的大小. [+100]原=01100100 [+0]原=00000000 [-100]原=11100100 [-0]原=10000000注意:在原码中,零有两种表示形式. 反码 正数的反码与其原码相同:负数的反码是对其原码逐位取反,但符号位除外. [+100]反=01100100 [+0]反=00000000 [-100]反=10011011[-0]反=1111111

【知识向】——计算机基础知识总结及相关

计算机组成 基本广泛的说计算机包括硬件(hardware)和软件(software)两部分.硬件就是计算机中可以被直观看见的物理部分.而软件提供看不见的指令,这些指令控制硬件并且使得硬件完成特定的任务. 本篇文章将简记在学习计算机的过程中,所学的一些计算机基础相关知识的杂记,以及一些拓展方面的认识. 那么我个人是学习计算机软件方面的,关于硬件的话,会比较少的接触到,一般就看一些视频了解一些相关的知识,这里就不介绍了,在下面主要将从软件方面的知识做记载,记载方式将以单个知识点记载,. *** 程序