二进制数的原码补码和反码课件
- 格式:ppt
- 大小:78.00 KB
- 文档页数:31
MOOC数字电子技术基础主讲人:侯建军教授北京交通大学电子信息工程学院第一节数制与编码三、二进制的原码、反码和补码各种数制都有原码和补码之分。
前面介绍的十进制和二进制数都属于原码。
补码分为两种:基数的补码和降基数的补码。
三、二进制的原码、反码和补码[]N N n-=2补(注:n是二进制数N整数部分的位数)二进制数N 的基数补码又称为2的补码,常简称为补码,其定义为:例:[1010]补=24-1010=10000-1010=0110[1010.101]补=24-1010.101=10000.000-1010.101=0101.011[1010.101]反=(24-2-3)-1010.101=1111.111-1010.101=0101.010(注:n 是二进制数N 整数部分的位数,m 是N 的小数部分的位数)例:[1010]反=(24-20)-1010=1111-1010=0101二进制数N 的降基数补码又称为1的补码,习惯上称为反码,其定义为:[]NN mn--=-)22(反三、二进制的原码、反码和补码[N ]反=01001001例:N =10110110根据定义,二进制数的补码可由反码在最低有效位加1得到。
即:[N ]补=无论是补码还是反码,按定义再求补或求反一次,将还原为原码。
即:01001001+ 00000001 0100101001001010[N ]补= [N ]反+1[[N ]补]补= [N ]原三、二进制的原码、反码和补码三、二进制的原码、反码和补码二进制正负数的表示法有原码、反码和补码三种表示方法。
对于正数而言,三种表示法都是一样的,即符号位为0,随后是二进制数的绝对值,也就是原码。
= 0 0101011例:(+43)D符号位绝对值二进制负数的原码、反码和补码:例:原码:符号位“1”+原码反码:符号位“1”+反码补码:符号位“1”+补码[-25]原= 1 0011001[-25]反= 1 1100110[-25]补= 1 1100111三、二进制的原码、反码和补码算术运算补码运算:[X 1]反+[X 2]反= [X 1+X 2]反符号位参加运算[X 1]补+[X 2]补= [X 1+X 2]补符号位参加运算在数字电路中,用原码求两个正数M 和N 的减法运算电路相当复杂。
3、带符号的⼆进制数(原码、反码、补码)1、数值的符号之前所提到的⼆进制数,没有考虑到符号问题,所指的都是⽆符号数。
但实际上数字是有正、负符号的。
以数字6为例,按照习惯的数学表⽰⽅法,正数6⽤+6表⽰,⼆进制为+110;负数6⽤-6表⽰,⼆进制数为-110.但在数字系统中,符号“+”、“-”也要数字化,⼀般将所对应的⼆进制数最⾼位增加多⼀位⽤来设为符号位,⽤“0”表⽰“+”、⽤“1”表⽰“-”。
为了区分⼀个符号数的“+”、“-”符号数字化前后的两种表⽰⽅法,引⼊真值和机器数两个术语。
真值:在⼀个⼆进制数前⾯⽤“+”、“-”表⽰正、负数的这种⼆进制数叫做真值。
机器数:将“+”、“-”符号⽤⼆进制码“0”、“1”表⽰的⼆进制数叫做机器数。
数据最后存到计算机中就是⽤机器数来表⽰的如下:+6 -> +110 -> 0110-6 -> -110 -> 1110(⼗进制数) (真值)(机器数)在计算机中最⼩基本的计算单位是字节,1字节=8位⼆进制数,由此可见最后存放到计算机中的机器数是8位⼆进制数,不够补0,符号位占据了1⼀个位置,所以到了最后只有7位数可以使⽤。
在c语⾔中使⽤ unsigned 关键字可以定义⼀个⽆符号的变量,可将变量的存储范围变⼤。
机器数是由符号位+⼆进制数组成的,机器数实际上是个⼤概念,意指这种类型的数据能存进去计算机,机器数在计算机中⼜有三种不同的表⽰⽅法,分别是:原码、补码、反码。
下⾯逐个列举2、原码将⼆进制数的真值中的正符号⽤0表⽰,负数符号⽤1表⽰,叫做数原码形式,简称原码。
例如:⼗进制为9的数,它的真值形式和原码形式如下所⽰:+9 -> +0001001 -> 0 0001001-9 -> - 0001001 -> 1 0001001(⼗进制数) (真值)(原码)原码⽤8位数码表⽰,最⾼位为符号位。
原码的优点是易于辨认,因为它的数值部分就是该数的绝对值,⽽且与真值和⼗进制数的转换⼗分⽅便。
反码在计算机内,定点数有3种表示法:原码、反码和补码。
所谓原码就是前面所介绍的二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
1、原码、反码和补码的表示方法(1)原码:在数值前直接加一符号位的表示法。
例如:符号位数值位[+7]原= 0 0000111 B[-7]原= 1 0000111 B注意:a. 数0的原码有两种形式:[+0]原=00000000B [-0]原=10000000Bb. 8位二进制原码的表示范围:-127~+127(2)反码:正数:正数的反码与原码相同。
负数:负数的反码,符号位为“1”,数值部分按位取反。
例如:符号位数值位[+7]反= 0 0000111 B[-7]反= 1 1111000 B注意:a. 数0的反码也有两种形式,即[+0]反=00000000B[- 0]反=11111111Bb. 8位二进制反码的表示范围:-127~+127(3)补码的表示方法1)模的概念:把一个计量单位称之为模或模数。
例如,时钟是以12进制进行计数循环的,即以12为模。
在时钟上,时针加上(正拨)12的整数位或减去(反拨)12的整数位,时针的位置不变。
14点钟在舍去模12后,成为(下午)2点钟(14=14-12=2)。
从0点出发逆时针拨10格即减去10小时,也可看成从0点出发顺时针拨2格(加上2小时),即2点(0-10=-10=-10+12=2)。
因此,在模12的前提下,-10可映射为+2。
由此可见,对于一个模数为12的循环系统来说,加2和减10的效果是一样的;因此,在以12为模的系统中,凡是减10的运算都可以用加2来代替,这就把减法问题转化成加法问题了(注:计算机的硬件结构中只有加法器,所以大部分的运算都必须最终转换为加法)。
二进制原码, 反码, 补码的基础概念和计算方法一. 原码, 反码, 补码的基础概念和计算方法.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] = [00000001]原 = [00000001]反 = [00000001]补但是对于负数:[-1] = [10000001]原 = [11111110]反 = [11111111]补机器可以只有加法而没有减法计算十进制的表达式: 1-1=01.如果用原码表示1 - 1 = 1 + (-1) = [00000001]原 + [10000001]原 = [10000010]原 = -2让符号位也参与计算, 显然对于减法来说, 结果是不正确的.这也就是为何计算机内部不使用原码表示一个数.2.如果用反码表示1 - 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.用补码表示1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原= [0000 0001]补 + [1111 1111]补= [0000 0000]补=[0000 0000]原=0这样0用[0000 0000]表示, 而以前出现问题的-0则不存在了.而且可以用[1000 0000]表示-128:(-1) + (-127) = [1000 0001]原 + [1111 1111]原= [1111 1111]补 + [1000 0001]补= [1000 0000]补=-128注:-1-127的结果应该是-128, 在用补码运算的结果中, [1000 0000]补就是-128. 但是注意因为实际上是使用以前的-0的补码来表示-128, 所以-128并没有原码和反码表示.(对-128的补码表示[1000 0000]补算出来的原码是[0000 0000]原, 这是不正确的)使用补码, 不仅仅修复了0的符号以及存在两个编码的问题, 而且还能够多表示一个最低数. 这就是为什么8位二进制, 使用原码或反码表示的范围为[-127, +127], 而使用补码表示的范围为[-128, 127].(-1) + (-1) = [1000 0001]原 + [1000 0001]原= [1111 1111]补 + [1111 1111]补= [1111 1110]补//负数原码=补码-1,再同位取反,符号位不变=[1000 0010]原=-2因为机器使用补码, 所以对于编程中常用到的32位int类型, 可以表示范围是: [-231, 231-1] 因为第一位表示的是符号位.而使用补码表示时又可以多保存一个最小值.三.总结综上所述,原码、反码和补码是计算机中用于表示有符号二进制数的三种重要方法。
二进制数的原码、补码和反码信息在计算机内的表示2.1 2.2 2.3 2.4 2.5 2.6 数据和信息二进制数值信息在计算机内的表示西文信息在计算机内的表示中文信息在计算机内的表示图形信息在计算机内的表示2.1.1数据P8ISO的定义:数据是对事实、概念或指令的一种特殊表达形式,这种特殊表达形式可以用人工的方式或者用自动化的装置进行通信、翻译转换或者进行加工处理。
一般的数字、文字、图画、声音、活动图像都是数据,计算机通过二进制编码形式对其进行处理。
计算机内部把数据区分为数值型和非数值Nanjing Normal Univ. Dept. of Computer Science 型。
2.1.2信息P8信息是有用的数据。
计算机信息处理的本质就是进行数据处理。
数据处理的目标是获得有用信息。
注意“信息系统”的用法。
常将信息系统称为:管理信息系统MIS(Man agement Information System) 或数据处理系统DPS(Data Processing System)Nanjing Normal Univ. Dept. of Computer Science2.2二进制P9什么是二进制何谓十进制?s=knkn-1。
.k0k-1k-2。
.k-m 特点:基数为十,逢十进一。
二进制特点:基数为二,逢二进一二进制优点:0,1两个状态易物理实现;运算规则简单。
Nanjing Normal Univ. Dept. of Computer Science二进制与十进制对照表(记忆)十进制0 1 2 3 4 5 二进制***** 0100 0101 十进制6 7 8 9 10 11 二进制***** 1010 1011 Nanjing Normal Univ. Dept. of Computer Science二进制数的运算P10算术运算:加法、减法。
0+0=0 0 -0=0 0+1=1 1+0=1 1+1=10 0- 1=1 1- 0=1 1- 1=0逻辑运算:或(∨) 、与(∧)、取反。