原码反码及补码(师用)

原码反码及补码(师用)
原码反码及补码(师用)

原码、反码和补码的概念

本节要求

掌握原码、反码、补码的概念

知识精讲

数值型数据的表示按小数点的处理可分为定点数和浮点数;按符号位有原码、反码和补码三种形式的机器数。

一.计算机中数据的表示方法

1、数的定点与浮点表示

在计算机内部,通常用两种方法来表示带小数点的数,即所谓的定点数和浮点数。

①定点数:是小数点在数中的位置是固定不变的数,数的最高位为符号位,小数点可在符号位之后,也可在数的末尾,小数点本身不需要表示出来,它是隐含的。

缺点:只有纯小数或整数才能用定点数表示;

②浮点数:小数点在数中的位置是浮动的、不固定的数。

一般浮点数既有整数部分又有小数部分,通常对于任何一个二进行制数N,总可以表示成:N=±2P×S

N、P、S均为二进制数,P为N的阶码,一般为定点整数,常用补码表示,阶码指明小数点在数据中的位置,它决定浮点的表示范围;S称为浮点数N的尾数,一般为定点小数,常用补码或原码表示,尾数部分给出了浮点数的有效数字位数,它决定了浮点数的精度,且规格化浮点数0.5≤|S|<1;

在计算机中表示一个浮点数其结构为:

假设用八个二进制位来表示一个浮点数,且阶码部分占4位,其中阶符占一位;尾数部分占4位,尾符也占一位。

若现有一个二进制数110

一个浮点形式的尾数S0,则该浮点数称为规格化数;规格化数可以提高运算的精度。

S为原码表示,则S1=1

规格化数

S为补码表示N为正数,则S1 =1

N为负数,则S1=0

二、原码、反码和补码

1、机器数与真值

真值:用“+”、“—”号表示的二进制数。

机器数:在计算机中数据和符号全部数字化,最高位为符号位,且用0表示正、1表示负,那么把包括符号在内的一个二进制数我们称为机器数。

如:将真值+11101B表示成机器数为011101B,—11101B表示成机器数为111101B。

2、原码、反码和补码的概念

1)概念

机器数有原码、反码和补码三种表示方法。

原码:是最简单的机器数表示法。其数符位用0表示正,1表示负,其余各位表示真值本身。1的原码是00000001,—1的原码是10000001。

反码:正数的反码同原码,负数的反码为除符号位外,其它各位按位取反。1的反码是00000001,—

1的反码是11111110。

补码:正数的补码同原码,负数的补码为反码加1。1的补码是00000001,—1的补码是11111110。

2)转换方法

当真值为正数时,3种机器数的最高位均为0,当真值为负数时该位为1,机器数的最高位为符号位,其它位称为数值位。当真值为正数时,原码、反码和补码相同;当真值为负数时,三种机器数的符号位相同,均为1,原码的数值位保持“原”样,反码的数值位是原码数值位的“按位取反”,补码的数值位是原码的数值位的“按位取反”后再加1,简称“取反加1”。

例如:(1)假设码长为8位,写出下列数的原码、反码和补码。

根据本题可得到结论:0的原码、反码各有两种表示方法,而补码是唯一的全0表示。

由此可见:n位的二进制数用原码表示,则可表示的数的个数为2-1个;n位的二进制数用反码表示,则可表示的数的个数为2n-1个;n位的二进制数用补码表示,则可表示的数的个数为2n个。

3、算术运算

计算机中的算术运算一般可采用补码进行,用补码表示的两个操作数进行算术运算,符号位可直接参加运算,结果仍为补码。

①定点补码加法运算

运算规则:[x+y]补=[x]补+[y]补

②定点补码减法运算

运算规则:[x-y]补=[x+(-y)]补=[x]补+[-y]补

[-y]补的求法是将[y]补的各位(包括符号位)全取反,最末位加1,即将[y]补连同符号位一起取反加1便可得到[-y]补。如:[y]补=10001010,则[-y]补=01110110;[y]补=0100,则[-y]补=1100。

注意:在进行运算时有时会发生溢出。

③定点补码运算的溢出处理

采用补码运算时若结果的数值超出了补码所能表示的范围,则此种情况称为溢出。若计算结果比能表示的最大数还大则称为上溢,上溢时一般作溢出中断处理;若计算结果比能表示的最小数还小则称为下溢,下溢时一般作机器零处理。

下面介绍用双符号判断溢出方法:

引入两个符号位C s+1、C s

C 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、一个四位二进制补码的表示范围是()

A、0~15

B、-8~7

C、-7~7

D、-7~8

2、(10题)十进制数-48用补码表示为()

A、10110000

B、11010000

C、11110000

D、11001111

分析:求某个负数的补码,可利用模的定义,所以求-48的补码,只需求-80的原码即可,因为-48+(-80)=-128,而[-80]原=11010000,故选B,注,传统做法是在原码的基础上“取反加1”。

答案:B

3、(09年镇江三模)如果X为负数,由[x]补求[-x]补是将()

A、[x]补各值保持不变

B、[x]补符号位变反,其他各位不变

C、[x]补除符号位外,各位变反,末位加1

D、[x]补连同符号位一起各位变反,末位加1

分析:不论X是正数还是负数,由[X]补求[-X]补的方法是对[X]补求补,即连同符号位一起按位取反,末位加1。

答案:D

二、判断题

1.计算机中一个浮点数N可用±2P×S表示,那么用规格化数表示,则尾数S必须满足0.5≤|S|<1。

【答案】对

【解题指导】一个浮点形式的尾数S若满足0.5≤|S|<1,且尾数的最高位数为1,无无效的0,则该浮点数称为规格化数;规格化数可以提高运算的精度。

三、填空题

1.二进制数0.011011的规格化数为1111111101101100 ,二进制数-11011的规格化数为0000010110010100 。(尾数、阶码均用8位二进制补码表示)

分析:0.011011可表示为0.11011×2-1,即规格化数为0.11011×2-1

-11011可表示为-0.11011×25,即规格化数为0.11011×2101

2、已知X、Y为两个有符号数的定点整数,它们的补码为:[x]补=00010011B,[y]补=11111001B,则[X+Y]补=B。

分析:[X+Y]补=[X]补+[Y]补,X为正数,Y为负数,故列式结果不溢出为00001100。

答案:00001100

原码、反码和补码的概念当堂练习

一、选择题

()1、机器数80H所表示的真值是-128,则该机器数为形式的表示。

A、原码

B、反码

C、补码

D、移码

()2、在浮点数中,阶码、尾数的表示格式是。

A、阶码定点整数,尾数定点小数

B、阶码定点整数,尾数定点整数

C、阶码定点小数,尾数定点整数

D、阶码定点小数,尾数定点小数

()3、已知[x]补=10110111,[y]补=01001010,则[x-y]补的结果是。

A、溢出

B、01101010

C、01001010

D、11001010

()4、某机字长8位,含一位数符,采用原码表示,则定点小数所能表示的非零最小正数为。

A、2-9

B、2-8

C、-1

D、2-7

()5、(08年)下列数中最小的数是____C____。

A.[10010101]原B.[10010101]反C.[10010101]补D.[10010101]2

()6、(12年)8位补码表示的定点整数的范围是 B 。

A、-128~+128

B、-128~+127

C、-127~+128

D、-127~+127

()7、(11年盐城二模)已知X的补码为10110100,Y的补码为01101010,则X-Y的补码为。

A) 01101010 B) 01001010 C) 11001010 D)溢出

()8、将-33以单符号位补码形式存入8位寄存器中,寄存器中的内容为()。

A.DFH B.A1H C.5FH D.DEH

()9、在机器数的三种表示形式中,符号位可以和数值位一起参加运算的是( ) A)原码 B)补码 C)反码 D)反码、补码

二、判断题

()1、16位的补码表示的定点整数的最小值是-32768。

()2、(10年南京二模)一个数在计算机中分别用原码、反码、补码表示时一定各不相同。

()3、(10年常州三模)字长相同,定点法表示数的范围比浮点法小。

()4.若用八位二进制数来表示一个有符号数,则原码、反码和补码表示的数的个数与范围均相同。

三、填空题

1、十进制数-27对应的8位二进制补码为。

2、(11年)已知X、Y为两个带符号的定点整数,它们的补码为:[X]补=00010011B,[Y]补=11111001B,则[X+Y]补 = 00001100 B。

3、数x的真值为-0.1011B,其原码表示为,补码表示为。

4、八位定点整数,采用二进制补码表示时,所能表示真值的十进制数的范围是。

5、(09年)已知[X]补=01110111B,[Y]补=01100010B,则[X-Y]补=______00010101__________。

6、(11年)一个含有6个“1”、2个“0”的八位二进制整数原码,可表示的最大数为7EH 。

(用十六进制表示)

7、(12年)已知[X]补=10000000B,则X= -10000000 B。

8、(10年盐城二模)二进制数10110000,若看成纯小数,且为补码,则其对应真值的十进制数是________。

原码、反码和补码的概念课后练习

一、选择题

()1、(10年盐城二模)“溢出”一般是指计算机在运算过程是产生的_____ 。

A、数据量超过内存容量

B、文件个数超过磁盘目录区规定的范围

C、数据超过了机器的位所能表示的范围

D、数据超过了变量的表示范围

()2、设有二进制数X=-1101110,若采用8位二进制数表示,则[X]补的结果是。

A、11101101

B、10010011

C、00010011

D、10010010

()3、假设有一个16机的某存储单元存放着数1101101101001000,若该数作为原码表示十进制有符

号整数(其中最高位为符号位)时,其值为。

A、-55510

B、-23368

C、-18762

D、56136

()4、计算机内的数有浮点和定点两种表示方法。一个浮点法表示的数由两部分组成,即。

A)指数和基数 B) 尾数和小数 C) 阶码和尾数 D) 整数和小数

二、判断题

()1.负数的补码就是原码逐位取反后的结果。

()2.[X]补是一个正数还是一个负数,是根据[X]补的符号位是“0”还是“1”确定的。

三、填空题

1、(11年盐城二模)已知[X]补=11111111,X对应的真值是 -1 。

2、已知[x]补=10111011,[y]补=01101101,则[x+y]补=__________

3、(10年南京二模).已知[X]补=10000000B,则X= (十进制)。

第二节数制及数制的转换巩固练习

一、选择题

1.(1110)2×(1011)2=———。

A)11010010 B)10111011 C)10110110 D)10011010

2.十六进制数(AB)16变换为等值的八进制数是____。

A)253 B)35l C)243 D)101

3.下列数中最大的数是。

A)(227)8 B)(1FF)16 C)(10100001)2 D)(1789)10

4.十进制数87转换成二进制数是。

A)(1010111)2 B)(1101010)2 C)(1110011)2 )D、(1010110)2

5.十进制数1385转换成十六进制数为。

A)568 B)569 C)D85 D)D55

6、(12年)下列不同进制数中最大的数是 D 。

A、10111001B

B、257Q

C、97D

D、BFH

二、判断题

()1、1000H是1000Q的2倍,因为16是8的2倍。

()2.十进制数要转换成十六进制数必须先转换为二进制数然后再由二进制数转换成十六进制数。()3.计算机中也可以直接处理十六进制数。

三、填空题

1.将一个十进制整数转换为二进制数,采用的方法,将所有的余数按照先后顺序组合的一起即可,而将一个纯小数转换为二进制数则可采用的方法,然后将所有的整数按照一定顺序组合在一起。

2、(09年)十进制数25.1875对应的二进制数是____11001.0011 。

3、一个二进制整数右端加上三个零,形成的新数是原数的倍。

4.八进制数37.4O转换成二进制数为。

真值原码反码补码详解和习题

原码、反码和补码的概念 本节要求 掌握原码、反码、补码的概念 知识精讲 数值型数据的表示按小数点的处理可分为定点数和浮点数;按符号位有原码、反码和补码三种形式的机器数。 一.计算机中数据的表示方法 1、数的定点与浮点表示 在计算机内部,通常用两种方法来表示带小数点的数,即所谓的定点数和浮点数。 ①定点数:是小数点在数中的位置是固定不变的数,数的最高位为符号位,小数点可在符号位之后,也可在数的末尾,小数点本身不需要表示出来,它是隐含的。 缺点:只有纯小数或整数才能用定点数表示; ②浮点数:小数点在数中的位置是浮动的、不固定的数。 一般浮点数既有整数部分又有小数部分,通常对于任何一个二进行制数N,总可以表示成:N=±2P×S N、P、S均为二进制数, P为N的阶码,一般为定点整数,常用补码表示,阶码指明小数点在数据中的位置,它决定浮点的表示范围 S为N的尾数,一般为定点小数,常用补码或原码表示,尾数部分给出了浮点数的有效数字位数,它决定了浮点数的精度,且规格化浮点数0.5≤|S|<1; 0.1B=( 1/2 )D =( 2-1)D 0.11B=(1/2 + 1/4 )D =( 2-1+2-2)D 0.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)D 101100B= 1011B * (22)D 101100B= 101.1B * (23)D 101100B= 10.11B * (24)D 101100B= 1.011B * (25)D 101100B= 0.1011B * (26110 一个浮点形式的尾数S若满足0.5≤|S|<1,且尾数的最高位数为1,无无效的0,则该浮点数称为规格化数;规格化数可以提高运算的精度。 S为原码表示,则S1=1 规格化数 S为补码表示N为正数,则S1 =1 N为负数,则S1=0

进制转换及原码反码补码练习题

进制转换练习题 【例题1-1】十进制数1000对应二进制数为______,对应十六进制数为______。 供选择的答案 A:①1111101010 ②1111101000 ③1111101100 ④1111101110 B:①3C8 ②3D8 ③3E8 ④3F8 【例题1-2】十进制小数为0.96875对应的二进制数为______,对应的十六进制数为______。 供选择的答案 A:①0.11111 ②0.111101 ③0.111111 ④ 0.1111111 B:①0.FC ②0.F8 ③0.F2 ④0.F1 【例题1-3】二进制的1000001相当十进制的______,二进制的100.001可以表示为______。 供选择的答案 A:①62 ②63 ③64 ④65 B:①23+2–3②22+2–2③23+2–2④22+2–3 【例题1-4】十进制的100相当于二进制______,十进制的0.110011相当二进制的______。 供选择的答案 A:①1000000 ②1100000 ③1100100 ④1101000 B:①2–1+2–2+2–4+2–5②1–(2–3+2–4) ③1+(–2–3–2–4) ④1–2–3–2–4–2–6 【例题1-5】八进制的100化为十进制为______,十六进制的100化为十进制为______。 供选择的答案 A:①80 ②72 ③64 ④56 B:①160 ②180 ③230 ④256 【例题1-6】在答案群所给出的关系式中正确的为______,在给出的等式中不正确的为______。 供选择的答案 A:①0.1112<0.7510②0.78>0.C16

原码、反码、补码详解

本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有 不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助! 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 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 二. 原码, 反码, 补码的基础概念和计算方法. 在探求为何机器要使用补码之前, 让我们先了解原码, 反码和补码的概念.对于一个数, 计算机要使用一定的编码方式进行存储. 原码, 反码, 补码是机器存储一个具体数字的编码 方式. 1. 原码 原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制: [+1]原 = 0000 0001 [-1]原 = 1000 0001 第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:

带符号数的原码、反码与补码分析

一.带符号数的原码、反码与补码 所谓带符号数,其实就是一个二进制数据,它的最高位所代表的是符号,其余位是其“绝对值”。例如0101_0011,这个数据如果是带符号数,那么最高位的0就是代表这个数据为正数,其后的101-0011则代表这个数据的绝对值,为+83D。如果是1101_0011,则代表-83D。 1.1 原码 原码就是按照正数的符号位为0,负数的符号位为1,其他位就是数据的绝对值即可。例如当机器字长为8bit的二进制数时,它的最高位为符号位,因此其余的7bit位数据的绝对值。因此原码所能表示的数据范围是: - (2n-1-1)~+(2n-1-1) 当字长为8bit,则原码能表示的范围就是:-127~+127 例如83的原码就是:0101_0011 当字长为16bit,则原码能表示的范围就是:-32767~+32767 例如-83的原码就是:1000_0000_0101_0011 1.2 反码 对于一个带有符号位的二进制数来说,正数的反码与其原码相同,负数的反码为其原码除符号位外其余各位按位取反。 例如当字长为8bit时,+83D的反码就是:0101_0011,-83D的反码就是1010_1100 负数的反码与原码有很大的差别,一般情况下,反码主要用来当做求二进制数补码的中间形式。反码所表示的数据范围与原码相同: - (2n-1-1)~+(2n-1-1) 1.2 补码 正数的补码与其原码相同,负数的补码为其反码在最低位加1。 例如: X=+101_1011 [X]原码=0101_1011 [X]补码=0101_1011 X=-101_1011 [X]原码=1101_1011 [X]补码=1010_0101 补码表示的范围是: - 2n-1~+(2n-1-1)

128的二进制有原码反码和补码 (1)

第一次修订 2009-5-6 14:11 --------------------- 1.模的概念(我只讲个例子,具体的可以查数学中的 "同余模") 在日常生活中,有许多化减为加的例子。例如,时钟是逢12进位,12点也可看作0点。 当将时针从10点调整到5点时有以下两种方法: 1.将时针逆时针方向拨5格,相当于做减法: 10-5=5 2.将时针顺时针方向拨7格,相当于做加法:10+(12-5)=12+5=5 (模为 12) 2.模的运用(采用模得到补码) 1.补码的得来:是为了让负数变成能够加的正数,so,负数的补码=模-负数的绝对值 比如:-1 补码:1111 1111(10000 0000 -1得来) 当一个数要减1的时候,可以直接加 1111 1111 2.原码的得来:(负数的原码,直接把对应正数的最高位改为1) 原码能够直观的表示一个负数(能直观的把真值显示出来,如 -1为1000 0001 其中最高位表示符号位,不进行算术计算) 3.总结:补码相加,到第9位才舍弃(模10000 0000) 原码相加,到第8位舍弃(模1000 0000) 反码相加,到第8位舍弃(模1000 0000) 3.原码和补码之间转换: 1.补码=原码减1,再取反(便于理解) 或补码= 反码+1(便于描述和推理) 2.演示:补码=原码减1,再取反 如-1的原码1000 0001-->1000 0000(减1后)-->1111 1111(取反后)补码 3.演示:补码= 反码+1) 如-1的原码 1000 0001-->1111 1110(反码)-->1111 1111(加1)补码 4.重点:(特别是在有进位的时候) 原码和反码的最高位是符号位,不参加算术运算,模为1000 0000(比补码少一个0) 而补码所有位都可以相加,模为10000 0000(最高位不是符号位,补码是通过模减去负数绝对值得到的) 5.推断-128的原码和补码(用补码= 反码+1) 1.关于原码1000 0000,表示的是-0,还是-128呢?(答案是-128而不是-0) 1.先看看原码的概念吧:正数的符号位为0,负数的符号位为1,其它位按照一般的方法来表示数的绝对值 2.0是负数吗?0既不是正数也不是负数,那么它的符号位到底是0还是1呢?(0的符号位为0,不能为1)

什么是原码反码补码

什么是原码反码补码 1100110011 原 1011001100 反除符号位,按位取反 1011001101 补除符号位,按位取反再加1 正数的原反补是一样的 ◆一个正数的补码和其原码的形式相同。 如果定义了一个整型变量i: int i;/*定义为整型变量*/ i=lO;/*给i赋以整数10*/ 十进制数10的二进制形式为1010,在微机上使用的C编译系统,每一个整型变量在内存中占2个字节。 图2.2(a)是数据存放的示意图。图2.2(b)是数据在内存中实际存放的情况。 图2.2 ◆求负数的补码的方法是:将该数的绝对值的二进制形式,按位取反再加1。 例如求-10的补码:①取-10的绝对值10;②10的绝对值的二进制形式为1010; ③对1010取反得1111111111110101(一个整数占16位);④再加1得1111111111110110,见图2.3。

整数的16位中,最左面的一位是表示符号的,该位为0,表示数值为正;为1 则数值为负。 北桥,南桥是主板上芯片组中最重要的两块了.它们都是总线控制器.他们是总线控制芯片.相对的来讲,北桥要比南桥更加重要.北桥连接系统总线,担负着cpu 访问内存的重任.同时连接这AGP插口,控制PCI总线,割断了系统总线和局部总线,在这一段上速度是最快的.南桥不和CPU连接通常用来作I/O和IDE设备的控制.所以速度比较慢.一般情况下,南桥和北桥中间是PCI总线. 1。南桥和北桥芯片主要区别是什么? 南桥主要是负责IO 北桥用于CPU和内存、显卡、PCI交换数据 2。如何巧妙辨别南桥和北桥芯片? 用功能辨别南桥芯片和北桥芯片: 北桥 它主要负责CPU与内存之间的数据交换,并控制AGP、PCI数据在其内部的传输,是主板性能的主要决定因素。随着芯片的集成度越来越高,它也集成了不少其它功能。如:由于Althon64内部整合了内存控制器;nVidia在其NF3 250、NF4等芯片组中,去掉了南桥,而在北桥中则加入千兆网络、串口硬盘控制等功能。现在主流的北桥芯征的牌子有VIA、NVIDIA及SIS等。 当然这些芯片的好坏并不是由主板生产厂家所决定的,但是主板生产商采取什么样的芯片生产却是直接决定了主板的性能。如:同样是采用VIA的芯片,性能上则有KT600>KT400A>KT333>KT266A等。目前主流的AMD平台上,可选的芯片组有:KT600、NF2、K8T800、NF3等;对于INTEL平台,则有915、865PE、PT880、845PE、848P等。 南桥 南桥芯片主要是负责I/O接口等一些外设接口的控制、IDE设备的控制及附加功能等等。常见的有VIA的8235、8237等;INTEL的有CH4、CH5、CH6等;nVIDIA 的MCP、MCP-T、MCP RAID等。在这部分上,名牌主板与一般的主板并没有很大的差异,但是名牌主板凭着其出色的做工,还是成为不少人的首选。而不排除一部分质量稍差的主板为了在竞争中取得生存,可能会采用功能更强的南桥以求在功能上取胜。 用芯片在主版上的位置辨别南桥芯片和北桥芯片: 北桥芯片就是位于和CPU插槽附近的一块芯片,其上面一般都覆盖了散热片

原码、反码与补码知识讲解

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 。同样,整数“0”的原码也有两种形式,即00…0和10…0。 2.2.3 反码 用反码表示带符号的二进制数时,符号位与原码相同,即用0表示正,用1表示负;数值位与符号位相关,正数反码的数值位和真值的数值位相同;而负数反码的数值位是真值的数值位按位变反。 1. 小数反码表示法 设二进制小数X=±0.x1x2…xm,则其反码定义为: 例如,X=+0.1011时,根据以上公式可得[X]反=0.1011;当X=-0.1011时,根据以上公式可得[X]反=2-2-4+X=10.0000-0.0001-0.1011=1.0100。根据定义,小数“0”的反码有两种表示形式,即0.0…0和1.1…1。 2. 整数反码表示法 设二进制整数X=±Xn-1Xn-2…X0,则其反码定义为: 例如,X=+1001时,根据以上公式可得[X]反= 01001;当X=-1001时,根据以上公式可得[X]反= (25-1)+X= (100000-1)+(-1001)= 11111-1001=10110 同样,整数“0”的反码也有两种形式,即00…0和11…1。

原码补码和反码的具体定义

原码补码和反码的具体定义 数在计算机中是以二进制形式表示的。 数分为有符号数和无符号数。 原码、反码、补码都是有符号定点数的表示方法。 一个有符号定点数的最高位为符号位,0是正,1是副。以下都以8位整数为例, 原码就是这个数本身的二进制形式。 例如 0000001 就是+1 1000001 就是-1 正数的反码和补码都是和原码相同。 负数的反码是将其原码除符号位之外的各位求反 [-3]反=[10000011]反=11111100 负数的补码是将其原码除符号位之外的各位求反之后在末位再加1。 [-3]补=[10000011]补=11111101 一个数和它的补码是可逆的。

为什么要设立补码呢? 第一是为了能让计算机执行减法: [a-b]补=a补+(-b)补 第二个原因是为了统一正0和负0 正零:00000000 负零:10000000 这两个数其实都是0,但他们的原码却有不同的表示。 但是他们的补码是一样的,都是00000000 特别注意,如果+1之后有进位的,要一直往前进位,包括符号位!(这和反码是不同的!) [10000000]补 =[10000000]反+1 =11111111+1 =(1)00000000 =00000000(最高位溢出了,符号位变成了0) 有人会问 10000000这个补码表示的哪个数的补码呢? 其实这是一个规定,这个数表示的是-128

所以n位补码能表示的范围是 -2^(n-1)到2^(n-1)-1 比n位原码能表示的数多一个 又例: 1011 原码:01011 反码:01011 //正数时,反码=原码 补码:01011 //正数时,补码=原码 -1011 原码:11011 反码:10100 //负数时,反码为原码取反 补码:10101 //负数时,补码为原码取反+1 0.1101 原码:0.1101 反码:0.1101 //正数时,反码=原码 补码:0.1101 //正数时,补码=原码 -0.1101 原码:1.1101

原码反码补码及运算

原码,反码,补码及运算 一、定义 1.原码 正数的符号位为0,负数的符号位为1,其它位按照一般的方法来表示数的绝对值。用这样的表示方法得到的就是数的原码。 【例2.13】当机器字长为8位二进制数时: X=+1011011 [X]原码=01011011 Y=+1011011 [Y]原码=11011011 [+1]原码=00000001 [-1]原码=10000001 [+127]原码=01111111 [-127]原码=11111111 原码表示的整数范围是: -(2n-1-1)~+(2n-1-1),其中n为机器字长。 则:8位二进制原码表示的整数范围是-127~+127 16位二进制原码表示的整数范围是-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为机器字长。 则:8位二进制补码表示的整数范围是-128~+127(-128 表示为10000000,无对应的原码和反码)16位二进制补码表示的整数范围是-32768~+32767 当运算结果超出这个范围时,就不能正确表示数了,此时称为溢出。 所以补码的设计目的是: ⑴使符号位能与有效值部分一起参加运算,从而简化运算规则. ⑵使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计 4.补码与真值之间的转换 正数补码的真值等于补码的本身;负数补码转换为其真值时,将负数补码按位求反,末位加1,即可

(数电知识)原码、反码与补码知识

2.1 原码、反码与补码 在计算机内的数(称之为“机器数”)值有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 。同样,整数“0”的原码也有两种形式,即00…0和10…0。 2.2.3 反码 用反码表示带符号的二进制数时,符号位与原码相同,即用0表示正,用1表示负;数值位与符号位相关,正数反码的数值位和真值的数值位相同;而负数反码的数值位是真值的数值位按位变反。 1. 小数反码表示法 设二进制小数X=±0.x1x2…xm,则其反码定义为: 例如,X=+0.1011时,根据以上公式可得[X]反=0.1011;当X=-0.1011时,根据以上公式可得[X]反=2-2-4+X=10.0000-0.0001-0.1011=1.0100。根据定义,小数“0”的反码有两种表示形式,即0.0…0和1.1…1。 2. 整数反码表示法 设二进制整数X=±Xn-1Xn-2…X0,则其反码定义为: 例如,X=+1001时,根据以上公式可得[X]反= 01001;当X=-1001时,根据以上公式可得[X]反= (25-1)+X= (100000-1)+(-1001)= 11111-1001=10110 同样,整数“0”的反码也有两种形式,即00…0和11…1。

原码、反码与补码的详细讲解

一、概述 大家都知道,一个十进制数在计算机中都是以二进制数的形式存储的。十进制数是有正负之分的,那么如何在计算机中来表示正号和负号呢? 我们通常使用二进制数的最高位来表示数的符号:“0”来表示正号,“1”来表示负号。 在计算机中整型数值数据的编码主要有: z原码 z反码 z补码 在开始讲述这三种编码方法前,我们首先介绍一下机器数、真值、模数的概念。 1.机器数 数(含符号)在机器中的编码表示。 2.真值 机器数所对应的真实数值。 3.模数 一个计量器的容量或与零等价的数。 z对于一个n位计数器,每1位有R种状态,每种状态代表1个数,从“0”开始计数。 z计数器所能计的数值的个数即模数。 z计数器的模数 = 计数器的最大值+1 。 z计数器的模数(R n)取决于基数(R)和位数(n)

例子01 2位十进制计数器的模数是多少? 解:R=10 n=2 模数=R n = 102 = 99(最大的2位十进制数)+1 = 100 例子02 8位二进制计数器的模数是多少? 解:R=2 n=8 模数=R n = 28 = 255(最大的8位二进制数)+1 = 256 4. 为什么使用编码来表示“数”? 为了方便计算机的处理,简化计算过程。 二、原码 1. 定义 022011 ≤

原码反码补码及求法

1、在计算机系统中,数值一律用补码来表示(存储)。 主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按 加法来处理。另外,两个用补码表示的数相加时,如果最高位(符号位)有 进位,则进位被舍弃。 2、补码与原码的转换过程几乎是相同的。 数值的补码表示也分两种情况: (1)正数的补码:与原码相同。 例如,+9的补码是00001001。 (2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后 整个数加1。 例如,-7的补码:因为是负数,则符号位为“1”,整个为10000111;其余7 位为-7的绝对值+7的原码0000111按位取反为1111000;再加1,所以 -7的补码是11111001。 已知一个数的补码,求原码的操作分两种情况: (1)如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码。(2)如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符 号位为1,其余各位取反,然后再整个数加1。 例如,已知一个补码为11111001,则原码是10000111(-7):因为符号 位为“1”,表示是一个负数,所以该位不变,仍为“1”;其余7位1111001 取反后为0000110;再加1,所以是10000111。 补码只不过是用来表示带符号数而已.补码的原则是: 正数的补码是其本身,也就是原码. 负数的补码是各位取反后加1.也就是其反码加1. +0的补码就是其原码,也就是说是0000 0000而已(对于8位来说) -0的补码是其反码加1,其反码是1111 1111,当然,其反码加1后就是溢出一个进位后,仍然是0000 0000. 0只有1种补码 正数的原码、反码、补码是同一个数 0正1负

二进制数的原码、反码、补码

在介绍计算机二进制数的原码、反码、补码之前我们先来看下面这道题: 问题:已知计算机字长为8位,求十进制数—102的原码、反码和补码。 最佳答案原码就是这个数本身的二进制形式。 例如 0000001 就是+1 1000001 就是-1 正数的反码和补码都是和原码相同。 负数的反码是将其原码除符号位之外的各位求反 [-3]反=[10000011]反=11111100 负数的补码是将其原码除符号位之外的各位求反之后在末位再加1。[-3]补=[10000011]补=11111101 一个数和它的补码是可逆的。 为什么要设立补码呢? 第一是为了能让计算机执行减法: [a-b]补=a补+(-b)补 第二个原因是为了统一正0和负0 正零:00000000 负零:10000000 这两个数其实都是0,但他们的原码却有不同的表示。 但是他们的补码是一样的,都是00000000

特别注意,如果+1之后有进位的,要一直往前进位,包括符号位!(这和反码是不同的!) [10000000]补 =[10000000]反+1 =11111111+1 =(1)00000000 =00000000(最高位溢出了,符号位变成了0) 有人会问 10000000这个补码表示的哪个数的补码呢? 其实这是一个规定,这个数表示的是-128 所以n位补码能表示的范围是 -2^(n-1)到2^(n-1)-1 比n位原码能表示的数多一个 又例: 1011 原码:01011 反码:01011 //正数时,反码=原码 补码:01011 //正数时,补码=原码 -1011

原码:11011 反码:10100 //负数时,反码为原码取反 补码:10101 //负数时,补码为原码取反+1 0.1101 原码:0.1101 反码:0.1101 //正数时,反码=原码 补码:0.1101 //正数时,补码=原码 -0.1101 原码:1.1101 反码:1.0010 //负数时,反码为原码取反 补码:1.0011 //负数时,补码为原码取反+1 总结: 在计算机内,定点数有3种表示法:原码、反码和补码 所谓原码就是前面所介绍的二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。 反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。 补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。 1、原码、反码和补码的表示方法 (1)原码:在数值前直接加一符号位的表示法。 例如:符号位数值位

二进制数的原码、反码及补码表示

(注意:理解的彻底这里) 二进制数的原码、反码及补码表示1、机器数与真值 机器数:数在机器中的编码表示。 真值:一般书写表示的数。 机器数中,数值和符号完全数字化。计算机在进行数字运算时,采用把各种符号位和数字位一起编码的方法。常见的有原码、反码及补码表示法。 2、原码表示法 原码表示法是机器数的一种简单表示法。其符号位用0表示正数,用1表示负数,数值一般用二进制形式表示。 [x]原=符号位+绝对值 若x=+1100110 则[x]原=01100110 x= -1100110 [x]原=11100110 (说明:其实就是把符号+-改为01) 所以用8位二进制数来表示整数原码时,其表示范围:最大数:01111111,为(+127)D 最小数:11111111,为(-127)D 思考:0的原码有两种表示形式!! 3、反码表示法 机器数的反码可由原码得到。如果机器数是正数,

则机器数的反码与原码一致; 若机器数是负数,则机器数的反码是它的原码(符号位除外)的各位取反而得到。即: 正数:[x]反=[x]原 负数:[x]反=对[x]原除符号外的各位取反 若x=+1100110 则[x]反=01100110 x= -1100110 [x]反=10011001 4、补码表示法 机器数的补码也可由原码得到。如果机器数是正数,则机器数的反码与原码一致;若机器数是负数,则机器数的反码是它的原码(符号位除外)的各位取反,并在末位加1而得到。即:反码是作为求补码的中间过程。 正数:[x]补=[x]原 负数:[x]补=[x]反+1 若x=+1100110 则[x]补=01100110 x= -1100110 [x]补=10011010 注意:补码的0只有一种表示形式! [+0]原=00000000 [-0]原=10000000 [+0]反=00000000 [-0]反=11111111 [+0]补=[-0]补=00000000 所以用8位二进制数来表示整数补码时,其表示范围:

计算机中的原码、反码和补码

大家都知道数据在计算机中都是按字节来储存了,1个字节等于8位(1Byte=8bit),而计算机只能识别0和1这两个数,所以根据排列,1个字节能代表256种不同的信息,即28(0和1两种可能,8位排列),比如定义一个字节大小的无符号整数(unsigned char),那么它能表示的是0~255(0~ 28-1)这些数,一共是256个数,因为,前面说了,一个字节只能表示256种不同的信息。别停下,还是一个字节的无符号整数,我们来进一步剖析它,0是这些数中最小的一个,我们先假设它在计算机内部就用8位二进制表示为00000000(从理论上来说也可以表示成其他不同的二进制码,只要这256个数每个数对应的二进制码都不相同就可以了),再假设1表示为00000001,2表示为00000010,3表示为00000011,依次类推,那么最大的那个数255在8位二进制中就表示为最大的数11111111,然后,我们把这些二进制码换算成十进制看看,会发现刚好和我们假设的数是相同的,而事实上,在计算机中,无符号的整数就是按这个原理来储存的,所以告诉你一个无符号的整数的二进制码,你就可以知道这个数是多少,而且知道在计算机中,这个数本身就是以这个二进制码来储存的。比如我给你一个2个字节大小的二进制码,首先声明它表示的是无符号的整数:00000000 00000010,我们把前面的0省略,换算一下,它表示的也是数值2,和前面不同的是,它占了2个字节的内存。不同的类型占的内存空间不同,如在我的电脑中char是1个字节,int是4个字节,long是8个字节(你的可能不同,这取决于不同的计算机设置),它们的不同之处仅仅是内存大的能表示的不同的信息多些,也就是能表示的数范围更大些(unsigned int能表示的范围是0~28*4-1),至于怎么算,其实都是一样的,直接把二进制与十进制相互转换,二进制就是它在计算机中的样子,十进制就是我们所表示的数(误解:不同的计算机储存的原理 是不同的,取决于商家的喜好呢)。无符号的整数根本就没有原码、反码和补码。 只有有符号的整数才有原码、反码和补码的!其他的类型一概没有。虽然我们也可以用二进制中最小的数去对应最小的负数,最大的也相对应,但是那样不科学,下面来说说科学的方法。还是说一个字节的整数,不过这次是有符号的啦,1个字节它不管怎么样还是只能表示256个数,因为有符号所以我们就把它表示成范围:-128-127。它在计算机中是怎么储存的呢?可以这样理解,用最高位表示符号位,如果是0表示正数,如果是1表示负数,剩下的7位用来储存数的绝对值的话,能表示27个数的绝对值,再考虑正负两种情况,27*2还是256个数。首先定义0在计算机中储存为00000000,对于正数我们依然可以像无符号数那样换算,从00000001到01111111依次表示1到127。那么这些数对应的二进制码就是这些数的原码。到这里很多人就会想,那负数是不是从10000001到11111111依次表示-1到-12 7,那你发现没有,如果这样的话那么一共就只有255个数了,因为10000000的情况没有考虑在内。实

二进制-原码-补码-反码

1月16日 补课:原码、补码和反码 数在计算机中是以二进制形式表示的。 数分为有符号数和无符号数。 原码、反码、补码都是有符号定点数的表示方法。 一个有符号定点数的最高位为符号位,0是正,1是副。 以下都以8位整数为例, 原码就是这个数本身的二进制形式。 例如 0000001 就是+1 1000001 就是-1 正数的反码和补码都是和原码相同。 负数的反码是将其原码除符号位之外的各位求反 [-3]反=[10000011]反=11111100 负数的补码是将其原码除符号位之外的各位求反之后在末位再加1。 [-3]补=[10000011]补=11111101 一个数和它的补码是可逆的。 为什么要设立补码呢? 第一是为了能让计算机执行减法: [a-b]补=a补+(-b)补 第二个原因是为了统一正0和负0 正零:00000000 负零:10000000 这两个数其实都是0,但他们的原码却有不同的表示。 但是他们的补码是一样的,都是00000000 特别注意,如果+1之后有进位的,要一直往前进位,包括符号位!(这和反码是不同的!) [10000000]补 =[10000000]反+1 =11111111+1 =(1)00000000 =00000000(最高位溢出了,符号位变成了0) 有人会问 10000000这个补码表示的哪个数的补码呢?

其实这是一个规定,这个数表示的是-128 所以n位补码能表示的范围是 -2^(n-1)到2^(n-1)-1 比n位原码能表示的数多一个 又例: 1011 原码:01011 反码:01011 //正数时,反码=原码 补码:01011 //正数时,补码=原码 -1011 原码:11011 反码:10100 //负数时,反码为原码取反 补码:10101 //负数时,补码为原码取反+1 0.1101 原码:0.1101 反码:0.1101 //正数时,反码=原码 补码:0.1101 //正数时,补码=原码 -0.1101 原码:1.1101 反码:1.0010 //负数时,反码为原码取反 补码:1.0011 //负数时,补码为原码取反+1 总结: 在计算机内,定点数有3种表示法:原码、反码和补码 所谓原码就是前面所介绍的二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。 反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。 补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。 1、原码、反码和补码的表示方法 (1) 原码:在数值前直接加一符号位的表示法。 例如: 符号位 数值位 [+7]原= 0 0000111 B

原码反码补码

原码反码补码 1、机器数 一个数在计算机中的二进制表示形式,叫做这个数的机器数。机器数是带符号的,在计算机中用一个数的最高位存放符号,正数为0,负数为1。 2、真值 由于机器数的第一位是符号位,所以机器数不等于真正的数值。为了区别起见。将带符号的机器数对应的真正数值称为机器数的真值。 二 1、原码 原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。 拿八位数来讲,他的取值范围就是[1111 1111 , 0111 1111],即[-127 , 127]。 2、反码 反码的表示方法: 正数的反码是其本身,负数的反码是在原码基础上,符号位不变,其余各位取反。 +1 = [0000 0001]原 =[0000 0001]反 - 1 = [1000 0001]原 =[1111 1110]反 3、补码 补码的表示方法: 正数的补码就是其本身,负数的补码是在原码的基础上,符号位不变,其余各位取 反,最后+1; +1 = [0000 0001]原 =[0000 0001]反 =[0000 0001]补 - 1 = [1000 0001]原 =[1111 1110]反 =[1111 1111]补 三 人们为了让计算机的电路设计变简单,想出了让符号位也参与运算的方法。 根据运算法则,减去一个正数等于加上一个负数,即1 - 1 = 1 +(-1) = 0,所 以机器可以只有加法,没有减法。 1 - 1 =1 + (-1) = [0000 0001]原 + [1000 0001]原 =[0000 0001]反 + [1111 1110]反 =[1111 1111]反 =[1000 0000]原 =-0 用反码计算,结果的真值部分是正确的,唯一的问题就是“0”这个特殊值上, [0000 0000]原和 [1000 0000]原两个编码表示0. 补码的出现解决了这个问题。 1 - 1 =1 + (-1) = [0000 0001]原 + [1000 0001]原 =[0000 0001]补 + [1111 1111]补 =[0000 0000]补 =[0000 0000]原 =0 (-1) + (-127) =[1000 0001]原 + [1111 1111]原 =[1111 1111]补 + [1000 0001]补 =[1000 0000]补 -1-127结果应该是-128,[1000 0000]补就是-128,这就导致错误。但是,注意因为实际上使用以前的-0的补码来表示-128,所以-128并没有原码和反码 表示。使用补码修复了0的符号以及存在的两个编码问题,而且还能够多表示一 个最低数。这就是为什么8位进制,使用原码或反码表示的范围为[-127,+127], 而使用补码表示的范围为[-128,+127].

计算机原理(原码、反码、补码)

计算机原理- 整数的补码,原码, 反码 解释一:对于整数来讲其二进制表示没有符号位.一个字节的表示范围为00000000-11111111,由此可见一个字节的整数表示范围为[0,255=2^8 - 1]。对于整数来讲,其二进制表示中存在一个符号位.先来看一下下面几个定义: 1:在计算机中,负数以其正值的补码形式表达。正数即在符号位补0. 2:原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。 3:反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。 4:补码: 反码+1 由以上可以得到.计算机储存有符号的整数时,是用该整数的补码进行储存的,0的原码、补码都是0;正数的原码、补码可以特殊理解为相同;负数的补码是它的反码加1。 范围: 正数[00000000 - 01111111] 即[0, 2^7 - 1]。负数[10000000 - 11111111] 。范围说明. 11111111 - 1 = 11111110,取反=00000001 即是-1. 10000000 -1 = 01111111,取反=10000000, 即是-128. 因此有一个有符号二进制表示范围是从[-128-127]. 解释二:大家都知道数据在计算机中都是按字节来储存了,1个字节等于8位(1Byte=8bit),而计算机只能识别0和1这两个数,所以根据排列,1个字节能代表256种不同的信息,即2^8(0和1两种可能,8位排列),比如定义一个字节大小的无符号整数(unsigned char),那么它能表示的是0~255(0~2^8 -1)这些数,一共是256个数,因为,前面说了,一个字节只能表示256种不同的信息。别停下,还是一个字节的无符号整数,我们来进一步剖析它,0是这些数中最小的一个,我们先假设它在计算机内部就用8位二进制表示为00000000(从理论上来说也可以表示成其他不同的二进制码,只要这256个数每个数对应的二进制码都不相同就可以了),再假设1表示为00000001,2表示为00000010,3表示为00000011,依次类推,那么最大的那个数255在8位二进制中就表示为最大的数11111111,然后,我们把这些二进制码换算成十进制看看,会发现刚好和我们假设的数是相同的,而事实上,在计算机中,无符号的整数就是按这个原理来储存的,所以告诉你一个无符号的整数的二进制码,你就可以知道这个数是多少,而且知道在计算机中,这个数本身就是以这个二进制码来储存的。 无符号的整数根本就没有原码、反码和补码。只有有符号的整数才有原码、反码和补码的!其他的类型一概没有。虽然我们也可以用二进制中最小的数去对应最小的负数,最大的也相对应,但是那样不科学,下面来说说科学的方法。还是说一个字节的整数,不过这次是有符号的啦,1个字节它不管怎么样还是只能表示256个数,因为有符号所以我们就把它表示成范围:-128-127。它在计算机中是怎么储存的呢?可以这样理解,用最高位表示符号位,如果是0表示正数,如果是1表示负数,剩下的7位用来储存数的绝对值的话,能表示2^7个数的绝对值,再考虑正负两种情况,2^7*2还是256个数。首先定义0在计算机中储存为00000000,对于正数我们依然可以像无符号数那样换算,从00000001到01111111依次表示1到127。那么这些数对应的二进制码就是这些数的原码。到这里很多人就会想,那负数是不是从10000001到11111111依次表示-1到-127,那你发现没有,如果这样的话那么一共就只有255个数了,因为10000000的情况没有考虑在内。实际上,10000000在计算机中表示最小的负整数,就是这里的-128,而且实际上并不是从10000001到11111111依次表示-1到-127,而是刚好相反的,从10000001到11111111依次表示-127到-1。负整数在计算机中是以补码形式储存的,补码是怎么样表示的呢,这里还要引入另一个概念——反码,所谓反码就是把负数的原码(负数的原码和和它的绝对值所对应的原码相同,简单的说就是绝对值相同的数原码相同)各个位按位取反,是1就换成0,是0就换成1,如-1的原码是00000001,和1的原码相同,那么-1的反码就是11111110,而补码就是在反码的基础上加1,即-1的补码是11111110+1=11111111,因此我们可以算出-1在计算机中是按11111111

相关文档
最新文档