真值原码反码补码详解和习题
原码、反码、补码详解!不懂的请看过来!(转)
原码、反码、补码详解!不懂的请看过来!(转)本篇⽂章讲解了计算机的原码、反码和补码,并且进⾏了深⼊探求了为何要使⽤反码和补码,以及更进⼀步的论证了为何可以⽤反码、补码的加法去计算原码的减法。
论证部分如有不对的地⽅请各位⽜⼈帮忙指正!希望本⽂对⼤家学习计算机基础有所帮助!⼀. 机器数和机器数的真值在学习原码,反码和补码之前,需要先了解机器数和真值的概念。
1、机器数⼀个数在计算机中的⼆进制表⽰形式,叫做这个数的机器数。
机器数是带符号的,在计算机⽤机器数的最⾼位存放符号,正数为0,负数为1。
⽐如,⼗进制中的数 +3 ,计算机字长为8位,转换成⼆进制就是0000 0011。
如果是 -3 ,就是 100 00011 。
那么,这⾥的 0000 0011 和 1000 0011 就是机器数。
2、机器数的真值因为第⼀位是符号位,所以机器数的形式值就不等于真正的数值。
例如上⾯的有符号数 1000 0011,其最⾼位1代表负,其真正数值是 -3,⽽不是形式值131(1000 0011转换成⼗进制等于131)。
所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。
例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1⼆. 原码, 反码, 补码的基础概念和计算⽅法在探求为何机器要使⽤补码之前,让我们先了解原码、反码和补码的概念。
对于⼀个数,计算机要使⽤⼀定的编码⽅式进⾏存储,原码、反码、补码是机器存储⼀个具体数字的编码⽅式。
1. 原码原码就是符号位加上真值的绝对值,即⽤第⼀位表⽰符号,其余位表⽰值。
⽐如:如果是8位⼆进制:[+1]原= 0000 0001[-1]原= 1000 0001第⼀位是符号位,因为第⼀位是符号位,所以8位⼆进制数的取值范围就是:(即第⼀位不表⽰值,只表⽰正负。
)[1111 1111 , 0111 1111]即[-127 , 127]原码是⼈脑最容易理解和计算的表⽰⽅式。
原码、反码与补码知识讲解
原码、反码与补码知识讲解2.2 原码、反码与补码在计算机内的数(称之为“机器数”)值有3种表示法:原码、反码和补码。
所谓原码就是带正、负号的二进制数,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
由此可见,这三种表示法中,关键是负数的表示方式不一样。
2.2.1 正负数表示、定点数与浮点数在计算机内,通常把1个二进制数的最高位定义为符号位,用“0”表示正数,“1”表示负数;其余位表示数值。
规定小数点位置固定不变的数称为“定点数”;小数点的位置不固定,可以浮动的数称为“浮点数”。
2.2.2 原码原码表示法是定点数的一种简单的表示法。
用原码表示带符号二进制数时,符号位用0表示正,1表示负;数值位保持不变。
原码表示法又称为符号-数值表示法。
1. 小数原码表示法设有一数为x,则原码表示可记作[x]原(下标表示)。
例如,X1= +1010110 ;X2= -1001010原码表示数的范围与二进制位数有关。
设二进制小数X=±0.X1X2…Xm,则小数原码的定义如下:例如:X=+0.1011时,根据以上公式可得[X]原=0.1011;X=-0.1011时,根据以上公式可得[X]原= 1-(-0.1011)=1.1011=1.1011当用8位二进制来表示小数原码时,其表示范围为:最大值为0.1111111,其真值约为(0.99)10 ;最小值为1.1111111,其真值约为(-0.99)10。
根据定义,小数“0”的原码可以表示成0.0…0或1.0…0。
2. 整数原码表示法整数原码的定义如下:例如:X=+1101时,根据以上公式可得[X]原=01101;X=-1101时,根据以上公式可得[X]原=24-(-1101)=10000+1101=11101当用8位二进制来表示整数原码时,其表示范围为:最大值为01111111,其真值为(127)10 ;最小值为11111111,其真值为(-127)10 。
原码反码补码及运算
原码,反码,补码及运算一、定义 1.原码 正数的符号位为0,负数的符号位为1,其它位按照一般的方法来表示数的绝对值。
用这样的表示方法得到的就是数的原码。
【例2.13】当机器字长为8位二进制数时:X=+1011011 [X]原码=01011011Y=+1011011 [Y]原码=11011011[+1]原码=00000001 [-1]原码=10000001[+127]原码=01111111 [-127]原码=11111111 原码表示的整数范围是: -(2n-1-1)~+(2n-1-1),其中n为机器字长。
则:8位二进制原码表示的整数范围是-127~+12716位二进制原码表示的整数范围是-32767~+32767 2.反码 对于一个带符号的数来说,正数的反码与其原码相同,负数的反码为其原码除符号位以外的各位按位取反。
【例2.14】当机器字长为8位二进制数时: X=+1011011 [X]原码=01011011 [X]反码=01011011 Y=-1011011 [Y]原码=11011011 [Y]反码=10100100 [+1]反码=00000001 [-1]反码=11111110 [+127]反码=01111111 [-127]反码=10000000 负数的反码与负数的原码有很大的区别,反码通常用作求补码过程中的中间形式。
反码表示的整数范围与原码相同。
3.补码 正数的补码与其原码相同,负数的补码为其反码在最低位加1。
引入补码以后,计算机中的加减运算都可以统一化为补码的加法运算,其符号位也参与运算。
【例2.15】(1)X=+1011011 (2)Y=-1011011 (1)根据定义有:[X]原码=01011011 [X]补码=01011011 (2)根据定义有:[Y]原码=11011011 [Y]反码=10100100 [Y]补码=10100101 补码表示的整数范围是-2n-1~+(2n-1-1),其中n为机器字长。
真值原码反码补码详解和习 题
运算规则:[x+y]补=[x]取补+[y]补
②定点补码减法运算
补 补 补 补 运算规则:[x-y] =[x+(-y)] =[x] +[-y]
补 补 [-y] 的求法是将[y] 的各位(包括符号位)全取反,最末位
反码:正数的反码同原码, 负数的反码为除符号位外,其它各位 按位取反。
正数的反码是其本身, 负数的反码是在其原码的基础上,符号 位不变,其余各个位取反
1的反码是00000001, —1的反码是11111110。
补码:正数的补码同原码,负数的补码为反码加1。 负数的补码是在其原码的基础上, 符号位不变, 其余各
加1。
补 补 即将[y] 连同符号位一起取反加1便可得到[-y] 。
[-x]补=模 - [x]补
[x]补=模 - [-x]补 比如8bit,模= 28
如:
补 补 补= [y] =10001010,则[-y] =01110110; [-1]
28 - [1]
补=1_0000_0000 - 0000_0001 = 1111_1111
若计算结果比能表示的最大数还大则称为上溢,上溢时一般作溢出 中断处理;
若计算结果比能表示的最小数还小则称为下溢,下溢时一般作机器 零处理。
下面介绍用双符号判断溢出方法:
引入两个符号位Cs+1、Cs Cs+1用来表示两个符号位向更高位进位时的状态,有进位时 Cs+1=1,无进位时Cs+1=0; Cs用来表示两数值的最高位向符号位进位时的状态,有进位时 Cs=1,无进位时Cs=0; 当Cs+1Cs=00或11时,无溢出;当Cs+1Cs=01或10时,有溢出,
真值原码逆补的详细讲解和练习.doc
真值原码逆补的详细讲解和练习原始码、逆码和补码的概念本节要求掌握原始码、逆码和补码的概念。
根据小数点处理方式,数字数据的表示可分为定点数和浮点数。
根据符号位,有三种机器号码:原始码、反码和补码。
一、计算机中的数据表示1.数字的定点数和浮点数在计算机内部表示。
通常,带小数点的数字有两种表达方式,即所谓的定点数和浮点数。
(1)固定点:但是,小数点在数字中的位置是固定的。
数字的最高位是符号位。
小数点可以在符号数字之后,也可以在数字的末尾。
小数点本身不需要表达。
这是隐含的。
缺点:只有纯小数或整数可以用定点表示;(2)浮点数:小数点在数字中的位置是浮动的,不是固定的。
通用浮点数既有整数部分也有小数部分。
通常,对于任何二进制数N,它可以表示为:N=2p× s n,p,s是二进制数,p是n的顺序码,通常是一个定点整数。
订单代码指示数据中小数点的位置。
它确定浮点表示范围s的尾数,通常是定点小数,通常用补码或原始代码表示。
尾数部分给出浮点数的有效位数,决定浮点数的精度,归一化后的浮点数为0.5 ≤| s | 1;0.1B=( 1/2 )D=( 2-根据符号位具有原始代码、反码和补码的机器数量。
一、计算机中的数据表示1.数字的定点数和浮点数在计算机内部表示。
通常,带小数点的数字有两种表达方式,即所谓的定点数和浮点数。
(1)固定点:但是,小数点在数字中的位置是固定的。
数字的最高位是符号位。
小数点可以在符号数字之后,也可以在数字的末尾。
小数点本身不需要表达。
这是隐含的。
缺点:只有纯小数或整数可以用定点表示;(2)浮点数:小数点在数字中的位置是浮动的,不是固定的。
通用浮点数既有整数部分也有小数部分。
通常,对于任何二进制数N,它可以表示为:N=2p× s n,p,s是二进制数,p是n的顺序码,通常是一个定点整数。
订单代码指示数据中小数点的位置。
它确定浮点表示范围s的尾数,通常是定点小数,通常用补码或原始代码表示。
计算机组成原理习题答案第二章
6.设[X]原=1.a1a2a3a4a5a6,
(1)若要X>-1/2
,a1~a6要满足什么条件?
(2)若要-1/8
≥X≥-1/4
,a1~a6要满足什么条件?
解:(1)X>-1/2
的代码为:
1.000001-1
64
…
1.011111-3/1
64
a1=0,a2+a3+a4+a5+a6=1。
(2)-1/8
解:无符号整数:0≤X≤(232-1)。
补码:-231≤X≤(231-1)。
11.某浮点数字长12位,其中阶符1位,阶码数值3位,数符1位,尾数数值7位,阶码以2为底,阶码和尾数均用补码表示。它所能表示的最大正数是多少?最小规格化正数是多少?绝对值最大的负数是多少?
解:最大正数=(1-2-7)×223-1=(1-2-7)×27=127。
20.以下列形式表示(5382)10。
(1)8421码; (2)余3码;
(3)2421码; (4)二进制数。
解:(1)0101001110000010。
(2)1000011010110101。
(3)1011001111100010。
(4)1010100000110。
21.填写下列代码的奇偶校验位,现设为奇校验:
0.10000001.1000000
0.1111000
1.1111000
00001101
10001101
00000000
00000000
0.10000001.1000000
0.1111000
1.0001000
00001101
11110011
00000000
11111111
原码反码补码
1.原码表示法(1)整数原码的定义为:式中x为真值,n为整数的位数。
小数原码的定义为注:正数的原码是把符号位改为‘0’,负数的原码把符号位改为‘1’即可。
例:当x=+0.1101时,[x]原=0.1101当x=-0.1101时,[x]原=1-(-0.1101)=1.1101(2)原码的表数范围。
对于定点整数:一个n+1位原码能表示的最大正数为01…11,即2n-1;能表示的最小数为绝对值最大的负数111…1,即-(2n-1)。
所以原码能表示的数值范围为: -(2n-1) ≤ x≤ 2n-1。
例:字长为8位的定点整数,x的原码的表示范围为(-127 ,127).对于定点小数:一个n+1位定点小数原码能表示的最大正数为0.1…11,即1-2-n;能表示的最小数为绝对值最大的负数为1.11…1,即-(1-2-n)。
定点小数原码的数值范围为: -(1-2-n) ≤ x≤ 1-2-n。
2.反码表示法例:正数的反码和原码一样,负数的反码把原码除符号位以外的所有位取反。
例:字长为8位的定点整数,x的反码的表示范围为(-127 ,127).3.补码表示法(1)整数补码的定义为:式中x为真值,n为整数的位数。
小数补码的定义为注:正数的补码是和原码相同,负数的补码把原码除符号位以外的所有为取反(反码),再加‘1’例:当x=+0.1101时,[x]原=0.1101,[x]补=0.1101当x=-0.1101时,[x]原=1.1101,[x]补=1.0010+1=1.0011[x]补=2+x=10.0000-0.1101=1.0011(2)补码的表数范围。
一个n+1位整数补码能表示的最大数是011…1,即2n-1;能表示的最小数为100…0,即-2n。
所以它能表示的数值范围是:-2n≤ x≤ 2n-1例:字长为8位的定点整数,x的补码的表示范围为(-128 ,127).一个n+1位小数补码能表示的最大数是0.11…1,即1-2-n;能表示的最小数为1.00… 0,即-1。
原码反码补码例题详解
以下是一个原码、反码和补码的例题及其详细解答:
题目:已知一个负整数X=-1101(二进制),求其原码、反码和补码。
解答:
1. 原码:原码就是符号位加上真值的绝对值。
由于X是负数,其符号位为1。
真值的绝对值为1101(二进制)。
所以,X的原码为11101(二进制)。
2. 反码:对于正数,反码就是其本身;对于负数,反码是在其原码的基础上,将所有1变为0,0变为1。
因此,X的反码为00011(二进制)。
3. 补码:对于正数,补码就是其本身;对于负数,补码是在其反码的基础上加1。
因此,X的补码为00100(二进制)。
总结:
* 原码表示的是符号位和真值的绝对值。
* 反码是在原码的基础上进行位反转。
* 补码是在反码的基础上加1。
需要注意的是,补码在计算机中通常用于存储数字,因为计算机内部只能处理二进制数据。
在计算机中,正数的补码就是其本身,负数的补码是其反码加1的结果。
第六章 习题解答.
(1)[x2]浮=1,0101;1.110 110 000 0 (2)[x2]浮=1,1011;1.001 010 000 0 (3)[x2]浮=0,1011;1.001 010 000 0 (1)[x3]浮=0,0011;0.111 011 000 0 (2)[x3]浮=0,0011;0.111 011 000 0 (3)[x3]浮=1,0011;0.111 011 000 0 (1)[x4]浮=0,0111;1.101 011 010 0 (2)[x4]浮=0,0111;1.010 100 110 0 (3)[x4]浮=1,0111;1.010 100 110 0 注:以上浮点数也可采用如下格式:
原 码 反 码 1.001 1010 1.110 0101 0.001 1101 0.001 1101 0,110 0100 0,110 0100 1,101 0111 1,010 1000
补 码 1.110 0110 0.001 1101 0,110 0100 1,010 1001
5. 已知[x]补,求[x]原和x。 [x1]补=1. 1100; [x2]补=1. 1001; [x3]补=0. 1110; [x4]补=1. 0000; [x5]补=1,0101; [x6]补=1,1100; [x7]补=0,0111; [x8]补=1, 0000; 解:[x]补与[x]原、x的对应关系如下:
第六章 习题解答
4. 设机器数字长为8位(含1位符号位在 内),写出对应下列各真值的原码、补码和 反码。 -13/64,29/128,100,-87 解:真值与不同机器码对应关系如下:
真
十进制
值
二进制
-13/64 29/128 100 -87
-0.00 1101 0.001 1101 110 0100 -101 0111
什么是原码、反码、补码
[-1] = [10000001]原 = [11111110]反 = [11111111]补
对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值.
三. 为何要使用原码, 反码和补码
在开始深入学习前, 我的学习建议是先"死记硬背"上面的原码, 反码和补码的表示方式以及计算方法.
1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]补 + [1111 1111]补 = [0000 0000]补=[0000 0000]原
这样0用[0000 0000]表示, 而以前出现问题的-0则不存在了.而且可以用[1000 0000]表示-128:
于是人们开始探索 将符号位参与运算, 并且只保留加法的方法. 首先来看原码:
计算十进制的表达式: 1-1=0
1 - 1 = 1 + (-1) = [00000001]原 + [10000001]原 = [10000010]原 = -2
如果用原码表示, 让符号位也参与计算, 显然对于减法来说, 结果是不正确的.这也就是为何计算机内部不使用原码表示一个数.
一. 机器数和真值
在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念.
1、机器数
一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1.
比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011 。
x mod y = x - y L x / y J
计算机中数值的三种表示方法详解:原码,反码, 补码
计算机中数值的三种表示方法详解原码,反码,补码最近在学习软件评测师的知识,其中涉及到计算机的原码, 反码和补码等知识. 通过网上查阅资料,进行了深入学习,分享给大家。
本文主要从以下几点进行介绍:如何计算原码,反码,补码?为何要使用反码和补码?希望本文对大家学习计算机基础有所帮助一. 机器数和真值在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念.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 = –1二. 原码, 反码, 补码的基础概念和计算方法.计算机中的符号数有三种表示方法,即原码、反码和补码。
三种表示方法均有符号位和数值位两部分,符号位都是用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,数值位相同。
真值原码反码补码详解和习题
原码、反码和补码的概念本节要求掌握原码、反码、补码的概念知识精讲数值型数据的表示按小数点的处理可分为定点数和浮点数;按符号位有原码、反码和补码三种形式的机器数。
一.计算机中数据的表示方法1、数的定点与浮点表示在计算机内部,通常用两种方法来表示带小数点的数,即所谓的定点数和浮点数。
①定点数:是小数点在数中的位置是固定不变的数,数的最高位为符号位,小数点可在符号位之后,也可在数的末尾,小数点本身不需要表示出来,它是隐含的。
缺点:只有纯小数或整数才能用定点数表示;②浮点数:小数点在数中的位置是浮动的、不固定的数。
一般浮点数既有整数部分又有小数部分,通常对于任何一个二进行制数N,总可以表示成:N=±2P×SN、P、S均为二进制数,P为N的阶码,一般为定点整数,常用补码表示,阶码指明小数点在数据中的位置,它决定浮点的表示范围S为N的尾数,一般为定点小数,常用补码或原码表示,尾数部分给出了浮点数的有效数字位数,它决定了浮点数的精度,且规格化浮点数0.5≤|S|<1;0.1B=( 1/2 )D =( 2-1)D0.11B=(1/2 + 1/4 )D =( 2-1+2-2)D0.111B=(1/2 + 1/4 + 1/8 )D =( 2-1+2-2+2-3)D ---------------------------在计算机中表示一个浮点数其结构为:假设用八个二进制位来表示一个浮点数,且阶码部分占4位,其中阶符占一位;尾数部分占4位,尾符也占一位。
若现有一个二进制数N=(101100)2可表示为:2110×0.1011,则该数在机器内的表示形式为:101100B= 10110B * (21)D101100B= 1011B * (22)D101100B= 101.1B * (23)D101100B= 10.11B * (24)D101100B= 1.011B * (25)D101100B= 0.1011B * (26110一个浮点形式的尾数S若满足0.5≤|S|<1,且尾数的最高位数为1,无无效的0,则该浮点数称为规格化数;规格化数可以提高运算的精度。
6.原码,反码,补码详解
6.原码,反码,补码详解本篇⽂章讲解了计算机的原码, 反码和补码. 并且进⾏了深⼊探求了为何要使⽤反码和补码, 以及更进⼀步的论证了为何可以⽤反码, 补码的加法计算原码的减法在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念.⼀、机器数和真值1、机器数⼀个数在计算机中的⼆进制表⽰形式, 叫做这个数的机器数。
机器数是带符号的,在计算机⽤⼀个数的最⾼位存放符号, 正数为0, 负数为1.⽐如,⼗进制中的数 +3 ,计算机字长为8位,转换成⼆进制就是00000011。
如果是 -3 ,就是 10000011 。
那么,这⾥的 00000011 和 10000011 就是机器数。
2、真值因为第⼀位是符号位,所以机器数的形式值不等于真正的数值。
例如上⾯的有符号数 10000011,其最⾼位1代表负,其真正数值是 -3 ⽽不是形式值131(10000011转换成⼗进制等于131)。
所以,为区别起见,将(带符号位的机器数)对应的(真正数值)称为(机器数的真值)。
即 -3:1000 0011(带符号位的机器数)对应的-3(真正数值)称为机器数的真值; 1:0000 0001的真值 = +000 0001 = +1; -1:1000 0001的真值 = –000 0001 = –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)[+1] = [00000001]原 = [00000001]反 = [00000001]补[-1] = [10000001]原 = [11111110]反 = [11111111]补对于负数, 补码表⽰⽅式也是⼈脑⽆法直观看出其数值的. 通常也需要转换成原码在计算其数值.三. 为何要使⽤原码, 反码和补码在开始深⼊学习前, 我的学习建议是先"死记硬背"上⾯的原码, 反码和补码的表⽰⽅式以及计算⽅法.现在我们知道了计算机可以有三种编码⽅式表⽰⼀个数. 对于正数因为三种编码⽅式的结果都相同:[+1] = [00000001]原 = [00000001]反 = [00000001]补所以不需要过多解释. 但是对于负数:[-1] = [10000001]原 = [11111110]反 = [11111111]补可见原码, 反码和补码是完全不同的. 既然原码才是被⼈脑直接识别并⽤于计算表⽰⽅式, 为何还会有反码和补码呢?1.原码因为⼈脑可以知道第⼀位是符号位, 在计算的时候我们会根据符号位, 选择对真值区域的加减. (真值的概念在本⽂最开头).但是对于计算机, 加减乘数已经是最基础的运算, 要设计的尽量简单. 计算机辨别"符号位"显然会让计算机的基础电路设计变得⼗分复杂!于是⼈们想出了将符号位也参与运算的⽅法. 我们知道:根据运算法则减去⼀个正数等于加上⼀个负数, 即: 1-1 = 1 + (-1) = 0 , 所以机器可以只有加法⽽没有减法, 这样计算机运算的设计就更简单了.于是⼈们开始探索将符号位参与运算, 并且只保留加法的⽅法. ⾸先来看原码:计算⼗进制的表达式: 1-1=01 - 1 = 1 + (-1) = [00000001]原 + [10000001]原 = [10000010]原 = -2如果⽤原码表⽰, 让符号位也参与计算, 显然对于减法来说, 结果是不正确的.这也就是为何计算机内部不使⽤原码表⽰⼀个数.2.反码为了解决原码做减法的问题, 出现了反码:计算⼗进制的表达式: 1-1=01 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原= [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原 = -0发现⽤反码计算减法, 结果的真值部分是正确的. ⽽唯⼀的问题其实就出现在"0"这个特殊的数值上. 虽然⼈们理解上+0和-0是⼀样的, 但是0带符号是没有任何意义的.⽽且会有[0000 0000]原和[1000 0000]原两个编码表⽰0.3.补码( √ )补码的出现, 解决了0的符号以及两个编码的问题:1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]补 + [1111 1111]补 = [0000 0000]补=[0000 0000]原这样0⽤[0000 0000]表⽰, ⽽以前出现问题的-0则不存在了.⽽且可以⽤[1000 0000]表⽰-128:(-1) + (-127) = [1000 0001]原 + [1111 1111]原 = [1111 1111]补 + [1000 0001]补 = [1000 0000]补-1-127的结果应该是-128, 在⽤补码运算的结果中, [1000 0000]补就是-128.但是注意因为实际上是使⽤以前的-0的补码来表⽰-128, 所以-128并没有原码和反码表⽰.(对-128的补码表⽰[1000 0000]补算出来的原码是[0000 0000]原, 这是不正确的)使⽤补码, 不仅仅修复了0的符号以及存在两个编码的问题, ⽽且还能够多表⽰⼀个最低数. 这就是为什么8位⼆进制, 使⽤原码或反码表⽰的范围为[-127, +127], ⽽使⽤补码表⽰的范围为[-128, 127].因为机器使⽤补码, 所以对于编程中常⽤到的32位int类型, 可以表⽰范围是: [-231, 231-1] 因为第⼀位表⽰的是符号位.⽽使⽤补码表⽰时⼜可以多保存⼀个最⼩值.四原码, 反码, 补码再深⼊计算机巧妙地把符号位参与运算, 并且将减法变成了加法, 背后蕴含了怎样的数学原理呢?(为什么补码的取值范围是[-128, 127]?)将钟表想象成是⼀个1位的12进制数. 如果当前时间是6点, 我希望将时间设置成4点, 需要怎么做呢?我们可以:1. 往回拨2个⼩时: 6 - 2 = 42. 往前拨10个⼩时: (6 + 10) mod 12 = 43. 往前拨10+12=22个⼩时: (6+22) mod 12 =42,3⽅法中的mod是指取模操作, 16 mod 12 =4 即⽤16除以12后的余数是4.所以钟表往回拨(减法)的结果可以⽤往前拨(加法)替代!现在的焦点就落在了如何⽤⼀个正数, 来替代⼀个负数. 上⾯的例⼦我们能感觉出来⼀些端倪, 发现⼀些规律. 但是数学是严谨的. 不能靠感觉.⾸先介绍⼀个数学中相关的概念: 同余(数学上,两个整数除以同⼀个整数,若得相同余数,则⼆整数同余(英⽂:Modular arithmetic,德⽂:Kongruenz)。
补充内容-原码、反码、补码PPT课件
符号位
数值位
符号位之后的其他位表示数值的大小。
在补码表示法中,最高位(符号位) 表示数的符号,正数为0,负数为1。
补码的表示方法
正数的补码
正数的补码与其原码相同,即符号位 为0,其余位为该数的二进制形式。
负数的补码
负数的补码是其绝对值的二进制形式 取反加1。
补码的优缺点
优点 解决了计算机内部运算的问题,使得加法和减法可以用同样的方式进行。
原码的表示方法
正数的原码表示是其二进制形式,例 如:+7 的原码就是 0000 0111。
负数的原码表示是在其二进制形式前 面加一位符号位(0为正,1为负), 例如:-7 的原码就是 1000 0111。
原码的优缺点
优点
简单易懂,易于实现加法和减法 运算。
缺点
编码不唯一,无法进行乘法和除 法运算,且溢出难以处理。
反码的优缺点
优点
在反码运算中,加法和减法可以统一处理,简化计算机中的运算电路设计。
缺点
使用反码表示负数时,会出现一个特殊的符号位,这会增加存储空间的开销, 同时也会影响运算的精度。此外,反码的加法和减法运算规则较为复杂,容易 出错。
03
补码
补码的定义
补码
在计算机中,补码表示法是一种二进 制编码方式,用于表示整数和实数。 补码表示法采用一个二进制位来表示 符号,其余位表示数值。
反码到补码的转换
总结词
反码转换为补码的过程
详细描述
反码转换为补码的过程相对简单,只需要在反码的基础上加1即可。例如,给定一个8位二进制数,如10101010, 加1后得到10101011,这就是该数的补码表示。
补码到原码、反码的转换
总结词
举例说明真值,原码,补码之间的转换方法
举例说明真值,原码,补码之间的转换方法真值、原码与补码之间的转换一、真值的表示方法真值是指一个数的实际数值,可以是正数、负数或零。
真值的表示方法可以通过以下三种方式来描述: - 原码:用二进制表示一个数的绝对值,最高位表示符号位,0表示正数,1表示负数。
- 反码:对于正数,其反码和原码相同;对于负数,将其各位取反,并将符号位设为1。
- 补码:对于正数,其补码和原码相同;对于负数,将其反码末位加1。
二、原码、反码和补码之间的转换原码、反码和补码之间可以相互转换,下面将分别介绍各种转换方式。
1. 原码转反码•对于正数而言,其原码、反码和补码相同,因此不需要进行转换。
•对于负数而言,原码转换为反码的方法是将其各位取反。
2. 原码转补码•对于正数而言,其原码、反码和补码相同,因此不需要进行转换。
•对于负数而言,原码转换为补码的方法是先求其反码,然后将反码末位加1。
3. 反码转原码•对于正数而言,其反码、原码和补码相同,因此不需要进行转换。
•对于负数而言,反码转换为原码的方法是将其各位再次取反。
4. 反码转补码•对于正数而言,其反码、原码和补码相同,因此不需要进行转换。
•对于负数而言,反码转换为补码的方法是先将反码末位加1。
5. 补码转原码•对于正数而言,其反码、原码和补码相同,因此不需要进行转换。
•对于负数而言,补码转换为原码的方法是先减去1,然后再将其各位取反。
6. 补码转反码•对于正数而言,其反码、原码和补码相同,因此不需要进行转换。
•对于负数而言,补码转换为反码的方法是先将补码减去1,然后再将其各位取反。
三、转换示例下面通过一些例子来演示真值、原码、反码和补码之间的转换。
1.假设有一个正数 +5,其原码、反码和补码都为。
2.假设有一个负数 -4,其原码为,反码为,补码为。
3.将负数 -4 的原码转换为补码,首先求反码:,再将反码末位加1,得到补码:。
4.将正数 +5 的补码转换为原码,首先减去1得到反码:=,再将反码各位取反得到原码:。
原码-反码-补码
原码-反码-补码1、对于正整数而言,它的原码、反码和补码都是一样的,即看到符号位(第一位)是0,就可以照着写出其他两种码。
2、对于负整数而言,它的原码、反码和补码都是不一样的。
原码《--》反码:符号位不变,数值位按位取反反码《--》补码:末位再加1原码《--》补码:符号位不变,数值位按位取反, 末位再加13、已知正整数X的补码,如何求-X的补码?答:X补码《--》-X的补码:符号位和数值位都取反,末位再加1比如1的补码为0000 0001 ,那么-1的补码就为 1111 11114、对于原码来说,对于一个字节8位的byte来说,其能表示的最小正整数为0000 0000,即0。
其能表示的最大整数为0111 1111,即2的7次方减1,即127。
其能表示的最大的负整数为1000 0001,即-1。
其理论上能表示的最小负整数为1111 1111,即负的2的7次方减1,即负的127。
但由于1000 0000还没有被用上,其理论上表示的是-0,也是0。
为了解决这个冲突,规定计算机中-0,即1000 0000表示为负的128.因此,对于一个字节8位的byte来说,其表示范围为【负的2的8次方到 2的8次方-1 】,即-128到127。
5、注意特殊情况,由于-0也是0,只不过规定-0就是-128而已,因此1000 0000的补码和原码,反码也是一样的,不能利用求负整数的原码,反码,补码规则去求解该值。
6、对于byte而言,其能表示的最小值-128减1后,发生进位溢出,请问溢出后值变为了什么答:在计算机中,对于值的计算,都是通过补码进行计算的,-128的补码比较特殊,其补码和原码一样,都是1000 0000,而-1的补码为1111 1111。
故他们相加后的补码表示为:10111 1111。
发生了进位溢出(负溢出),符号位会参与计算,始终会丢掉第一位,得到0111 1111,即正的127.7、对于byte而言,其能表示的最大值127加1后,发生进位溢出,请问溢出后值变为了什么答:127的补码和原码是一样的,都为0111 1111,而1的补码和原码也是一样的,都为0000 0001,他们相加后的补码表示为:1000 0000,即-128.8、对于其能表示的最小值减一发生进位溢出会变为其能表示的最大值,对于其能表示的最大值加一发生进位溢出会变为其能表示的最小值。
原码反码补码详解
原码反码补码详解⼀. 机器数和真值在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念.1.机器数⼀个数在计算机中的⼆进制表⽰形式, 叫做这个数的机器数。
2.真值机器数的实际值称为真值。
3.符号数和⽆符号数符号数和⽆符号数是针对符号出现的两种机器数表⽰⽅法。
同⼀个⼆进制数,对符号数和⽆符号数具有不同的含义。
符号数如: char, short ,int, long等类型的变量⽆符号数如:unsigned char, unsigned short , unsigned int, unsigned long, 指针等类型的变量4.定点数与浮点数定点数和浮点数是针对⼩数点出现的两种机器数表⽰⽅法。
⼆. 原码, 反码, 补码的基础概念和计算⽅法只有符号数才有原码, 反码, 补码在探求为何机器要使⽤补码之前, 让我们先了解原码, 反码和补码的概念.对于⼀个数, 计算机要使⽤⼀定的编码⽅式进⾏存储. 原码, 反码,补码是机器存储⼀个具体数字的⼀种编码⽅式.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]补对于负数, 补码表⽰⽅式也是⼈脑⽆法直观看出其数值的. 通常也需要转换成原码在计算其数值.三. 为何要使⽤原码, 反码和补码1.使⽤补码,可以将符号位和其它位统⼀处理;同时,减法也可按加法来处理。
原码、补码、反码、移码(习题) (1)
原码、补码、反码、移码一、选择合适的名词解释(20分)1 原码表示2补码表示3 反码表示4 移码表示5 逻辑数A 正数与原码相同,负数符号位为“1”,数值部分求反加1B不带符号的二进制数C用“0”表示正号,用“1”表示负号,有效值部分用二进制的绝对值表示D正数与原码相同,负数符号位为“1”,数值部分求反E在真值X基础上加上一个偏移值,是符号位取反的补码1 (C )2 (A )3 (D )4 (E )5 (B )二、简答题(80分)1机器数字长为8位(含1位符号位),当x=+100(十进制)时:(10分,每问2分)(1)求出其对应的二进制数直接求得:1100100(2)[]x原=0,1100100正数原码反码补码一样(3)[]x反=0,1100100(4)[]x补=0,1100100(5)[]x移=1,1100100移码除了符号位取反,其他的和原码反码补码一样2设机器数字长为8位(含1位符号位),若机器数为80H(十六进制):(10分)(1)当它代表原码时,求出等价的十进制整数(2分)表示原码为1000 0000,即对应的整数为-0(2)当它代表补码时,求出等价的十进制整数(3分)表示成补码为1000 0000,则补码-1得到反码:0111 1111,进而取反得到原码,对应的整数为-128(3)当它代表反码时,求出等价的十进制整数(3分)表示成反码为1000 0000,进而取得原码为0111 1111,即对应的整数为-127(4)当它代表移码时,求出等价的十进制整数(2分)表示成移码为1000 0000,进而取得原码为1000 0000,即对应的整数为-0 3设机器数字长为8位(含1位符号位),求十进制数x=-52的:(10分)(1)[]x原及[]x-原(3分)-52二进制表示为-110100,则[]x原=1,0110100[]x-原=0,0110100(2)[]x反及[]x-反(4分)[]x反=1,1001011 []x-反=0,0110100[]x反除了符号位剩下的都取反,[]x-反除了符号位和原码一样(3)[]x补及[]x-补(4分)[]x补=1,1001100 []x-补=0,0110100[]x-补和反码一样,[]x补在反码的基础上加一4设机器数字长为8位(含1位符号位),求十进制数x=-0.6875的:(10分)(1)[]x原及[]x-原(3分)-0.6875二进制表示为-0.10110 []x原=1.1011000[]x-原=0.1011000符号位取反(2)[]x反及[]x-反(4分)[]x反=1.0100111 []x-反=0.1011000[]x反除了符号位剩下的都取反,[]x-反和原码一样(3)[]x补及[]x-补(4分)[]x补=1.0101000 []x-补=0.1011000[]x-补和反码一样,[]x补在反码的基础上加一5某机字长16位(含1位符号位),求:(10分)(1)它能表示的无符号整数范围(2分)0-65535(2)用原码表示的定点小数范围(3分)-(1-23-15)~(1-2-15)(3)用补码表示的定点小数范围(3分)-1~(1-2-15)(4)用补码表示的定点整数范围(2分)-32 768~32 767(-215~215-1)6某小数定点机,字长8位(含1位符号位),求:(10分)(1)当机器数采用原码时,其对应的真值范围(十进制表示)(3分)-127/128~+127/128(2)当机器数采用补码时,其对应的真值范围(十进制表示)(4分)-1~+127/128(3)当机器数采用反码时,其对应的真值范围(十进制表示)(4分)-127/128~+127/1287请从数据机器编码的表示方法、范围以及运算、应用等当面,对比叙述原码、补码、反码、移码的特点。
原码-反码-补码及运算
原码,反码,补码及运算一、定义1.原码正数的符号位为0,负数的符号位为1,其它位按照一般的方法来表示数的绝对值。
用这样的表示方法得到的就是数的原码。
【例2.13】当机器字长为8位二进制数时:X=+1011011 [X]原码=01011011Y=-1011011 [Y]原码=11011011[+1]原码=00000001 [-1]原码=10000001[+127]原码=01111111 [-127]原码=11111111原码表示的整数范围是:-(2n-1-1)~+(2n-1-1),其中n为机器字长。
则:8位二进制原码表示的整数范围是-127~+12716位二进制原码表示的整数范围是-32767~+327672.反码对于一个带符号的数来说,正数的反码与其原码相同,负数的反码为其原码除符号位以外的各位按位取反。
【例2.14】当机器字长为8位二进制数时:X=+1011011 [X]原码=01011011 [X]反码=01011011Y=-1011011 [Y]原码=11011011 [Y]反码=10100100[+1]反码=00000001 [-1]反码=11111110[+127]反码=01111111 [-127]反码=10000000负数的反码与负数的原码有很大的区别,反码通常用作求补码过程中的中间形式。
反码表示的整数范围与原码相同。
3.补码正数的补码与其原码相同,负数的补码为其反码在最低位加1。
引入补码以后,计算机中的加减运算都可以统一化为补码的加法运算,其符号位也参与运算。
【例2.15】(1)X=+1011011 (2)Y=-1011011(1)根据定义有:[X]原码=01011011 [X]补码=01011011(2)根据定义有:[Y]原码=11011011 [Y]反码=10100100[Y]补码=10100101补码表示的整数范围是-2n-1~+(2n-1-1),其中n为机器字长。
则:8位二进制补码表示的整数范围是-128~+127(-128 表示为10000000,无对应的原码和反码)16位二进制补码表示的整数范围是-32768~+32767当运算结果超出这个范围时,就不能正确表示数了,此时称为溢出。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
原码、反码和补码的概念本节要求掌握原码、反码、补码的概念知识精讲数值型数据的表示按小数点的处理可分为定点数和浮点数;按符号位有原码、反码和补码三种形式的机器数。
一.计算机中数据的表示方法1、数的定点与浮点表示在计算机内部,通常用两种方法来表示带小数点的数,即所谓的定点数和浮点数。
①定点数:是小数点在数中的位置是固定不变的数,数的最高位为符号位,小数点可在符号位之后,也可在数的末尾,小数点本身不需要表示出来,它是隐含的。
缺点:只有纯小数或整数才能用定点数表示;②浮点数:小数点在数中的位置是浮动的、不固定的数。
一般浮点数既有整数部分又有小数部分,通常对于任何一个二进行制数N,总可以表示成:N=±2P×SN、P、S均为二进制数,P为N的阶码,一般为定点整数,常用补码表示,阶码指明小数点在数据中的位置,它决定浮点的表示范围S为N的尾数,一般为定点小数,常用补码或原码表示,尾数部分给出了浮点数的有效数字位数,它决定了浮点数的精度,且规格化浮点数0.5≤|S|<1;0.1B=( 1/2 )D =( 2-1)D0.11B=(1/2 + 1/4 )D =( 2-1+2-2)D0.111B=(1/2 + 1/4 + 1/8 )D =( 2-1+2-2+2-3)D ---------------------------在计算机中表示一个浮点数其结构为:假设用八个二进制位来表示一个浮点数,且阶码部分占4位,其中阶符占一位;尾数部分占4位,尾符也占一位。
若现有一个二进制数N=(101100)2可表示为:2110×0.1011,则该数在机器内的表示形式为:101100B= 10110B * (21)D101100B= 1011B * (22)D101100B= 101.1B * (23)D101100B= 10.11B * (24)D101100B= 1.011B * (25)D101100B= 0.1011B * (26110一个浮点形式的尾数S若满足0.5≤|S|<1,且尾数的最高位数为1,无无效的0,则该浮点数称为规格化数;规格化数可以提高运算的精度。
S为原码表示,则S1=1规格化数S为补码表示N为正数,则S1 =1N为负数,则S1=0二、原码、反码和补码1、机器数与真值机器数:在计算机中数据和符号全部数字化,最高位为符号位,且用0表示正、1表示负,那么把包括符号在内的一个二进制数我们称为机器数,机器数:有原码、反码和补码三种表示方法。
比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。
如果是 -3 ,就是 10000011 。
那么,这里的 00000011 和 10000011 就是机器数。
真值:用“+”、“—”号表示的二进制数。
机器数因为第一位是符号位,所以机器数的形式值就不等于真正的数值。
例如上面的有符号数 10000011,其最高位1代表负,其真正数值是 -3 而不是形式值131(10000011转换成十进制等于131)。
所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。
例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = -000 0001 = -12、原码、反码和补码的概念1)概念机器数:有原码、反码和补码三种表示方法。
原码:是最简单的机器数表示法。
其数符位用0表示正,1表示负,其余各位表示真值本身。
即用第一位表示符号,其余位表示值,比如如果是8位二进制:1的原码是00000001,—1的原码是10000001。
反码:正数的反码同原码,负数的反码为除符号位外,其它各位按位取反。
正数的反码是其本身,负数的反码是在其原码的基础上,符号位不变,其余各个位取反1的反码是00000001,—1的反码是11111110。
补码:正数的补码同原码,负数的补码为反码加1。
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1 1的补码是00000001,—1的补码是11111110。
2)转换方法当真值为正数时,原码、反码、补码3种机器数的最高位均为0当真值为负数时,原码、反码、补码3种机器数的最高位均为1机器数的最高位为符号位,其它位称为数值位。
当真值为正数时,原码=反码=补码;当真值为负数时,三种机器数的符号位相同,均为1,原码的数值位保持“原”样,反码的数值位是,简称“取反加1”。
当真值为负数时:补码= 反码+1当真值为负数时:原码= [补码]取补补码= [原码]取补[-x]补=模- [x]补[x]补=模- [-x]补比如8bit,模= 28=1_0000_0000例如:(1)假设码长为8位,写出下列数的原码、反码和补码。
由此可见:n位的二进制数用原码表示,则可表示的数的个数为2-1个;n位的二进制数用反码表示,则可表示的数的个数为2n-1个;n位的二进制数用补码表示,则可表示的数的个数为2n个。
比如:补码中用(-128)代替了(-0)编程中常用到的32位int类型,可以表示范围是: [-231 ~231 -1] 因为第一位表示的是符号位.而使用补码表示时又可以多保存一个最小值-2G~2G-13、算术运算计算机中的算术运算一般可采用补码进行,用补码表示的两个操作数进行算术运算,符号位可直接参加运算,结果仍为补码。
①定点补码加法运算运算规则:[x+y]补=[x]取补+[y]补②定点补码减法运算运算规则:[x-y]补=[x+(-y)]补=[x]补+[-y]补[-y]补的求法是将[y]补的各位(包括符号位)全取反,最末位加1。
即将[y]补连同符号位一起取反加1便可得到[-y]补。
[-x]补=模- [x]补[x]补=模- [-x]补比如8bit,模= 28如:[y]补=10001010,则[-y]补=01110110;[-1]补=28 - [1]补=1_0000_0000 - 0000_0001 = 1111_1111[y]补=0100,则[-y]补=1100;[-(-1)]补=28 - [-1]补=1_0000_0000 - 1111_1111 = 0000_0001 注意:在进行运算时有时会发生溢出。
③定点补码运算的溢出处理采用补码运算时若结果的数值超出了补码所能表示的范围,则此种情况称为溢出。
若计算结果比能表示的最大数还大则称为上溢,上溢时一般作溢出中断处理;若计算结果比能表示的最小数还小则称为下溢,下溢时一般作机器零处理。
下面介绍用双符号判断溢出方法:引入两个符号位C s+1、C sC s+1用来表示两个符号位向更高位进位时的状态,有进位时C s+1=1,无进位时C s+1=0;C s用来表示两数值的最高位向符号位进位时的状态,有进位时C s=1,无进位时C s=0;当C s+1C s=00或11时,无溢出;当C s+1C s=01或10时,有溢出,当双符号位为01时正溢出,当双符号位为10时负溢出;例如:[x]补=10011100,[y]补=10011000,则[x+y]补= 。
溢出,因为C s+1C s=10。
故溢出逻辑表达式为V=C s+1⊕C s④无符号数的运算无符号数的运算实际上是指参加运算的操作数X、Y均为正数,且整个字长全部用于表示数值部分。
当两个无符号数相加时,其值在字长表示的范围内,其结果为正数。
当两个无符号数相减时,其值的符号位取决于两数绝对值的大小。
另外,地址在计算机中用无符号数表示。
四原码, 反码, 补码再深入计算机巧妙地把符号位参与运算, 并且将减法变成了加法, 背后蕴含了怎样的数学原理呢?将钟表想象成是一个1位的12进制数. 如果当前时间是6点, 我希望将时间设置成4点,我们可以:1. 往回拨2个小时: 6 - 2 = 42. 往前拨10个小时: (6 + 10) mod 12 = 43. 往前拨10+12=22个小时: (6+22) mod 12 =42,3方法中的mod是指取模操作, 16 mod 12 =4 即用16除以12后的余数是4. 所以钟表往回拨(减法)的结果可以用往前拨(加法)替代!现在的焦点就落在了如何用一个正数, 来替代一个负数. 上面的例子我们能感觉出来一些端倪, 发现一些规律. 但是数学是严谨的. 不能靠感觉. 首先介绍一个数学中相关的概念: 同余“模”是指一个计量系统的计数范围例如:时钟的计量范围是0~11,模=12。
表示n位的计算机计量范围是0~2n -1,模=2n“模”实质上是计量器产生“溢出”的量,它的值在计量器上表示不出来,计量器上只能表示出模的余数。
任何有模的计量器,均可化减法为加法运算。
比如:时钟(模=12)中,加8和减4效果是一样的,因此凡是减4运算,都可以用加8来代替对时钟(模=12)而言,8和4互为补数。
以12模的系统中,11和1;10和2;9和3;7和5;6和6都互为补数。
共同的特点是两者相加等于模对于计算机,其概念和方法完全一样。
n位计算机,设n=8,所能表示的最大数是11111111,若再加1称为100000000(9位)但因只有8位,最高位1自然丢失。
又回了00000000,所以8位二进制系统的模为28。
在这样的系统中减法问题也可以化成加法问题,只需把减数用相应的补数表示就可以了。
[-x]补=模- [x]补[x]补=模- [-x]补比如8bit,模= 28[-1]补=28 - [1]补=1_0000_0000 - 0000_0001 = 1111_1111[-(-1)]补=28 - [-1]补=1_0000_0000 - 1111_1111 = 0000_0001把补数用到计算机对数的处理上,就是补码。
负数取模x mod y = x - y*int( x / y )int( x / y ) VB语法表示:不大于(x/y)的最大整数,即向下取整int(-1.5)=-2Fix(-1.5)=-1举例: -3 mod 2 = -3 - 2*int(-3/2) = -3 - 2*(-2) = -3 - 2x(-2)=1同余的概念两个整数a,b,若它们除以整数m所得的余数相等,则称a,b对于模m同余记作 a ≡ b (mod m) 读作 a 与 b 对于模m 同余举例说明: 4 mod 12 = 4 ; 16 mod 12 = 4 ; 28 mod 12 = 4所以4, 16, 28对于模12 同余.两个定理:1、反身性:a ≡ a (mod m) 自己和自己对于模m同余2、线性运算定理:如果a ≡ b (mod m),c ≡ d (mod m)那么:(1)a ± c ≡ b ± d (mod m)(2) a * c ≡ b * d (mod m)3、传递性:若a≡b (mod m),b≡c (mod m),则a≡c (mod m)典型例题一、选择题1、一个四位二进制补码的表示范围是()A、0~15B、-8~7C、-7~7D、-7~82、(10题)十进制数-48用补码表示为()A、10110000B、11010000C、11110000D、11001111分析:求某个负数的补码,可利用模的定义,所以求-48的补码,只需求-80的原码即可,因为-48+(-80)=-128,而[-80]原=11010000,故选B,注,传统做法是在原码的基础上“取反加1”。