无符号数、有符号数、原码、反码、补码——数据在计算机内部的表示
- 格式:pdf
- 大小:248.42 KB
- 文档页数:2
计算机组成原理教案(数字媒体专业)第一章计算机系统概论内容简介:计算机系统的层次结构,冯·诺伊曼计算机的硬件结构和主要功能,计算机的工作步骤以及计算机的主要技术指标。
教学目标:了解计算机系统的层次结构;了解冯·诺伊曼计算机的特点及硬件构成;理解计算机的工作步骤,了解计算机的主要技术指标的含义及其对计算机的影响。
教学重点和难点:虚拟机的概念;计算机的硬件构成;计算机的工作步骤。
教学媒体和教学方法:使用幻灯片在多媒体教室进行教学;教学中采用讲授与讨论相结合的方法。
教学过程:一、计算机系统简介1.计算机的软硬件概念(1)硬件(2)软件(3)软硬件的关系2.计算机系统的层次结构(1)虚拟机的概念(2)各层虚拟机及与真实机器的层次关系3.计算机的基本组成(1)冯·诺伊曼计算机的特点(2)计算机硬件结构,总线的构成。
讨论、分析直连结构的问题,提出总线思想,并简单介绍总线结构。
(3)计算机的工作步骤提出计算机解决问题的基本步骤计算机基本构成部件的介绍(运算器、存储器、控制器)以计算ax2+bx+c为例分析计算机工作的过程4.计算机的主要技术指标(1)机器字长计算机同时处理的二进制位机器字长与数据总线宽度、存储字长的关系(2)存储容量存储容量的单位主存容量辅存容量(3)运算速度几种计算运算速度的方法并对它们进行比较运算速度的表示单位第二章计算机的发展及应用内容简介:计算机的发展史;计算机的应用领域;计算机的发展展望。
教学目标:了解计算机的产生和发展以及发展思路;了解计算机的应用领域;了解计算机的发展趋势。
教学重点和难点:计算机的应用领域。
教学媒体和教学方法:使用幻灯片在多媒体教室进行教学;教学中采用讲授与讨论相结合的方法。
教学过程:一、计算机的发展史1.计算机的产生和发展现代计算机的研究工作第一台电子计算机的产生计算机的发展阶段计算机的发展规律计算机的发展趋势2.微型计算机的出现和发展微型计算机的发展阶段微型计算机的发展带来的工作、学习、生活方式的变化3.软件技术的兴起和发展软硬件的融合,简介嵌入式发展方向二、计算机的应用1.科学计算和数据处理通过ENIAC进行计算的一个案例,直观体会计算机的计算能力2.工业控制和实时控制3.网络技术应用4.虚拟现实介绍虚拟现实技术的一些应用5.办公自动化和管理信息系统6.多媒体技术7.人工智能三、计算机发展的展望第三章系统总线内容简介:总线的概念;总线的分类;总线的特性和性能指标;总线结构;总线控制。
为什么计算机用补码存储数据?在计算机内部,所有信息都是用二进制数串的形式表示的。
整数通常都有正负之分,计算机中的整数分为无符号的和带符号的。
无符号的整数用来表示0和正整数,带符号的证书可以表示所有的整数。
由于计算机中符号和数字一样,都必须用二进制数串来表示,因此,正负号也必须用0、1来表示。
通常我们用最高的有效位来表示数的符号(当用8位来表示一个整数时,第8位即为最高有效位,当用16位来表示一个整数时,第16位即为最高有效位。
)0表示正号、1表示负号,这种正负号数字化的机内表示形式就称为“机器数”,而相应的机器外部用正负号表示的数称为“真值”。
将一个真值表示成二进制字串的机器数的过程就称为编码。
无符号数没有原码、反码和补码一说。
只有带符号数才存在不同的编码方式。
带符号整数有原码、反码、补码等几种编码方式。
原码即直接将真值转换为其相应的二进制形式,而反码和补码是对原码进行某种转换编码方式。
正整数的原码、反码和补码都一样,负数的反码是对原码的除符号位外的其他位进行取反后的结果(取反即如果该位为0则变为1,而该位为1则变为0的操作)。
而补码是先求原码的反码,然后在反码的末尾位加1 后得到的结果,即补码是反码+1。
IBM-PC中带符号整数都采用补码形式表示。
(注意,只是带符号的整数采用补码存储表示的,浮点数另有其存储方式。
)采用补码的原因或好处如下,采用补码运算具有如下两个特征:1)因为使用补码可以将符号位和其他位统一处理,同时,减法也可以按加法来处理,即如果是补码表示的数,不管是加减法都直接用加法运算即可实现。
2)两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。
这样的运算有两个好处:1)使符号位能与有效值部分一起参加运算,从而简化运算规则。
从而可以简化运算器的结构,提高运算速度;(减法运算可以用加法运算表示出来。
)2)加法运算比减法运算更易于实现。
使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计。
数据在计算机内部的表示与存储作者:刘英皓2013/4/17 今天在做单片机实验的时候,突然对一个问题产生了浓厚的兴趣:数据在计算机内部是怎么表示的?晚上查阅了大量的资料,终于把其中的玄机弄明白了。
资料来源甚广,在此就不一一声明了,感谢!!数据是什么?它是用来表示信息的。
是信息的载体。
比如数值、文字、语言、图形、影像等都是不同形式的数据。
而在计算机中,无论是数值型数据还是非数值型数据,它们都被表示成了0和1。
既然都变成了0和1,那计算机怎么区别这些不同的信息呢?别担心,它们各在有各自的编码规则。
非数值型数据的编码主要有ASCII 码和汉字编码。
这里不深究。
数值型数据:它主要有两种形式,有符号数和无符号数1、有符号数和无符号数它们的定义估计你都听腻了,我就不重复了,我只强调两点:a.计算机不区分有符号数和无符号数。
b.只有有符号数才有原码、反码和补码。
2、原码、反码和补码还是两点:a.正数的原码、反码和补码都一样。
b.负数的反码为原码除符号位的按位取反,补码为反码加1.注意两点:b1.反码1111 1111的补码是0000 0000.b2.补码1000 0000没有对应的原码和反码,它表示-128,这是规定3、计算机存储单元中的数据这个要分两种情况:a.无符号数:直接以对应的二进制表示。
b.有符号数:补码形式表示,无论是计算还是存取。
比如在内存单元中有一个数据为FEH,那么它到底是表示什么?254还是-2?没关系,你说是什么就是什么。
因为计算机是不会区分这个数是有符号数还是无符号数的。
在你写程序的时候,指定这个量是有符号的,FEH就是一个补码,可以计算得它的真值就是-2,如果指定它是无符号的,那么它就是254。
不同的形式在程序中便会有不同的体现。
要注意的是在计算中不要超出了数值的范围,以免发生错误。
如有疑问请联系:yinghao1991@。
数据表示数据在内存中都是用补码表示的,正数的原码、反码、补码都是一样的,就是原码本身。
负数的补码就是反码加1。
无符号数:就是一般的表示形式,没有符号位,9:0000 0000 0000 0000 0000 0000 0000 1001。
有符号数:最高位是符号位,1表示负数,0表示正数。
剩下部分就是补码表示。
-9:1111 1111 1111 1111 1111 1111 1111 0111。
已知负数的二进制表示形式(补码表示),如何求其大小了?:去掉最高符号位,将剩余部分求补码,然后将所得到的正数加上负号就行了。
将此表达式最高位,符号位1去掉,剩下的就是补码:111 1111 1111 1111 1111 1111 1111 0111,对此部分求补码得:000 0000 0000 0000 0000 0000 0000 1001,也就是9,然后加上负号,所以该式表示的就是-9。
移位运算无符号数移位:左移:左边丢弃,右边补0。
右移:左边补0,右边丢弃。
有符号数移位:左移:左边丢弃,右边补0。
右移:左边补符号位,右边丢弃。
特别要注意有符号数的移位,当左移时,左边丢弃,所以符号位会被丢弃,因此,正数可能变成负数,负数可能变成正数;当右移时,左边的丢弃,右边的最高位补符号位(这个跟编译器有关)。
下面对上述分析作总结:一:左移运算对于有符号数和无符号数都是一样的:左边丢弃,右边补0。
二:无符号数的右移:右边丢弃,左边补0。
而有符号数的右移:右边丢弃,从左边移入新位时,可以选择两种方案。
一是逻辑移位:左边移入的位用0填充;另一种是算数移位:左边移入的位由原先该值的符号位决定,符号位为1,则移入的位为1,符号位为0,则移入的位为0,这样能保证原数的正负形式不变。
这里要特别强调的是:有符号数右移时,到底采用逻辑移位还是算数移位取决于编译器,这个我们可以简单的写一个程序测试一下我们的编译器采用哪一种,VC/S采用的是算数移位。
在计算机的存储器中统一采用二进制数的方式进行数据存储。
而编程中则综合使用二进制、八进制、十进制与十六进制的数据表示方法,程序编译后一般生成十六进制的可烧写文件,而烧写到存储器后最终在存储单元中存放的还是二进制形式。
而二进制又有真值,原码,反码,补码,机器数,有符号数,无符号数,等诸多概念之分。
故下面主要就二进制数(以整数为例,后面提到的数据皆指整数)的存储与运算过程中涉及到的一些概念与规则进行梳理。
讲的主要是在计算机中的,以8位单片机为例,后面以32位ARM单片机指令举例。
1有符号数和无符号数。
数据首先分为有符号数和无符号数。
对于无符号数来说,肯定指的0与正数,无负数之说,自然也无原码、反码、补码之说,一般也不针对于无符号数讨论机器数、真值等概念。
其存储方式与有符号数存储也无特别之处,具体的将在“存储单元中的数据”一节讲述。
有符号数,有正负与0三种,由于在计算机中无法表示负号,或者说用专门的符号表示负号很不方便,于是就采用对正负号进行数值编码的方式,用“0”代表非负数,“1”代表负数。
根据不同的编码方式,对有符号数一般可以有原码、反码、补码三种最常见的编码形式。
2 真值真值就是所表示的数的大小,一般用10进制表征。
3 原码、反码、补码具体概念我就不重复了,只重申下相关结论:a.正数的原码、反码、补码都相同。
b.负数的反码为原码的按位取反(保持符号位不变),补码为反码加1.4 机器数原码、反码、补码都是机器数的一种表示形式,或说都属于机器数。
5 存储单元中的数据(存储单元包括存储器中的存储单元和寄存器)在计算机的存储器的存储单元中的数据均以补码形式存放的,于是在计算机中的数据表示有下面结论:a不使用原码与反码。
但原码与反码可以作为计算真值的中间媒介。
b存储单元中的数据以补码形式存在。
c 数据的存取与运算都以补码形式进行。
d补码就是机器数,机器数就是补码。
解释:掌握一个基本原则——简单,存储单元是个很有原则的家伙,他只管存01序列,才不管该序列是表示指令编码还是数据呢,更不会管是有符号数还是无符号数,也不管是数据的原码、反码还是补码。
计算机中数值的三种表示方法详解原码,反码,补码最近在学习软件评测师的知识,其中涉及到计算机的原码,反码和补码等知识.通过网上查阅资料,进行了深入学习,分享给大家。
本文主要从以下几点进行介绍:如何计算原码,反码,补码?为何要使用反码和补码?希望本文对大家学习计算机基础有所帮助.机器数和真值在学习原码,反码和补码之前,需要先了解机器数和真值的概念.1、机器数一个数在计算机中的二进制表示形式,叫做这个数的机器数。
机器数是带符号的, 在计算机用一个数的最高位存放符号,正数为0,负数为1.比如,十进制中的数+3,计算机字长为8位,转换成二进制就是00000011。
如果是-3,就是10000011 那么,这里的00000011 和10000011 就是机器数。
2、真值因为第一位是符号位,所以机器数的形式值就不等于真正的数值。
例如上面的有符号数10000011,其最高位1代表负,其真正数值是-3而不是形式值131(10000011转换成十进制等于131 )。
所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。
例:0000 0001 的真值=+000 0001 = +1 , 1000 0001 的真值=-000 0001.原码,反码,补码的基础概念和计算方法计算机中的符号数有三种表示方法,即原码、反码和补码。
三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。
1.原码原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值.比如如果是8位二进制:[+1]原=0000 0001 [-1]原=1000 0001第一位是符号位.因为第一位是符号位,所以8位二进制数的取值范围就是:[1111 1111 , 0111 1111][-127,127]原码是人脑最容易理解和计算的表示方式2.反码反码的表示方法是:正数的反码是其本身负数的反码是在其原码的基础上,符号位不变,其余各个位取反.[+1] = [00000001] 原=[00000001]反[-1] = [10000001] 原=[11111110]反可见如果一个反码表示的是负数,人脑无法直观的看出来它的数值.通常要将其转换成原码再计算.3.补码补码的表示方法是:正数的补码就是其本身负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1.(即在反码的基础上+1)[+1] = [00000001] 原=[00000001]反=[00000001]补[-1] = [10000001] 原=[11111110]反=[11111111]补对于负数,补码表示方式也是人脑无法直观看出其数值的.通常也需要转换成原码在计算其数值.简单总结以下,反码和补码的表示方式以及计算方法对于正数,三种编码方式的结果都相同正整数的原码、反码、补码完全一样,即符号位固定为0,数值位相同。
数据的表⽰和存储数制与编码“转换”的概念在数据表⽰中的反映信息的⼆进制编码机器级数据分两⼤类 数值数据:⽆符号整数、带符号整数、浮点数(实数) ⾮数值数据:逻辑数(包括位串)、西⽂字符和汉字计算机内部所有信息都⽤⼆进制(即:0和1)进⾏编码⽤⼆进制编码的原因制造⼆个稳定态的物理器件容易(电位⾼/低,脉冲有/⽆,正/负极) ⼆进制编码、计数、运算规则简单正好与逻辑命题真/假对应,便于逻辑运算 可⽅便地⽤逻辑电路实现算术运算真值和机器数 ( ⾮常重要的概念!) 机器数:⽤0和1编码的计算机内部的0/1序列 真值:真正的值,即:现实中带正负号的数例:unsigned short型变量x的真值是127,其机器数是多少? 127=27-1,其机器数为0000 0000 0111 1111数值数据的表⽰数值数据表⽰的三要素 进位计数制 定、浮点表⽰ 如何⽤⼆进制编码即:要确定⼀个数值数据的值必须先确定这三个要素。
例如,20137564的值是多少?进位计数制 ⼗进制、⼆进制、⼗六进制、⼋进制数及其相互转换定/浮点表⽰(解决⼩数点问题) 定点整数、定点⼩数 浮点数(可⽤⼀个定点⼩数和⼀个定点整数来表⽰)定点数的编码(解决正负号问题) 原码、补码、反码、移码(反码很少⽤)进制数⼗进制数,每个数位可⽤⼗个不同符号0,1,2,…,9来表⽰,每个符号处在⼗进制数中不同位置时,所代表的数值不⼀样。
例如,2585.62代表的值是: 2585.62 = 2×103+5×102+8×101+5×100+6×10-1+2×10-2• ⼀般地,任意⼀个⼗进制数 D=dndn-1 ... d1d0 . d-1d-2 ... d-m (m,n为正整数)• 其值可表⽰为如下形式: V(D) = dn×10n + dn-1×10n-1 + ...+ d1×101 + d0 ×100 + d-1 ×10-1 + d-2 ×10-2+...+d-m ×10-m 其中,di(i=n,n–1, ... ,1,0, –1, –2, ... –m)可以是 0,1,2,3,4,5,6,7,8,9这10个数字符号中的任何⼀个; “10”称为基数(base),它代表每个数位上可以使⽤的不同数字符 号个数。
数据在计算机内部的表示与存储
作者:刘英皓
2013/4/17 今天在做单片机实验的时候,突然对一个问题产生了浓厚的兴趣:数据在计算机内部是怎么表示的?晚上查阅了大量的资料,终于把其中的玄机弄明白了。
资料来源甚广,在此就不一一声明了,感谢!!
数据是什么?它是用来表示信息的。
是信息的载体。
比如数值、文字、语言、图形、影像等都是不同形式的数据。
而在计算机中,无论是数值型数据还是非数值型数据,它们都被表示成了0和1。
既然都变成了0和1,那计算机怎么区别这些不同的信息呢?别担心,它们各在有各自的编码规则。
非数值型数据的编码主要有ASCII 码和汉字编码。
这里不深究。
数值型数据:它主要有两种形式,有符号数和无符号数
1、有符号数和无符号数
它们的定义估计你都听腻了,我就不重复了,我只强调两点:
a.计算机不区分有符号数和无符号数。
b.只有有符号数才有原码、反码和补码。
2、原码、反码和补码
还是两点:
a.正数的原码、反码和补码都一样。
b.负数的反码为原码除符号位的按位取反,补码为反码加1.
注意两点:
b1.反码1111 1111的补码是0000 0000.
b2.补码1000 0000没有对应的原码和反码,它表示-128,这是规定
3、计算机存储单元中的数据
这个要分两种情况:
a.无符号数:直接以对应的二进制表示。
b.有符号数:补码形式表示,无论是计算还是存取。
比如在内存单元中有一个数据为FEH,那么它到底是表示什么?254还是-2?没关系,你说是什么就是什么。
因为计算机是不会区分这个数是有符号数还是无符号数的。
在你写程序的时候,指定这个量是有符号的,FEH就是一个补码,可以计算得它的真值就是-2,如果指定它是无符号的,那么它就是254。
不同的形式在程序中便会有不同的体现。
要注意的是在计算中不要超出了数值的范围,以免发生错误。
如有疑问请联系:yinghao1991@。