原码、反码、补码和移码的公式归纳
计算机基础知识点总结

22.某计算机内存按字节编址,内存地址区域从44000H到 6BFFFH,共有 28 K字节。若采用16K×4bit的SRAM芯 片,构成该内存区域共需 29 片。
28、A.128 29、A.5
B.160 B.10
C.180 D.220
C.20
D.32
将信息输 出
23、在 中,用户一般不直接操纵计算机,而是将作业提交
将信息输 出
10. 以下有关 PCI 总线的基本概念中,正确的描述是 。 A. PCI 总线是一个与处理器无关的高速外围总线 B. PCI 设备一定是主设备 C. 系统中允许只有一条 PCI 总线 D. 以桥连接实现的 PCI 总线结构不允许多条总线并行工作
将信息输 出
11.DMA访问主存时,让CPU处于等待状态,等DMA的一批数据访问结束后, CPU再恢复工作,这种情况称作______。 A.停止CPU访问主存; B.周期挪用; C.DMA与CPU交替访问; D.DMA。
18. 800×600 的分辨率的图像,若每个像素具有16位的颜色深度,则可
表示( )种不同的颜色。 A.1000
B. 1024 C.
65536 D. 480000
将信息输 出
19. 已知某字符的ASCII码值用十进制表示为69,若用二进制形式表示并 将最高位设置为偶校验位,则为()。 A.11000101 B.01000101 C.11000110 D.01100101
奇偶检验码:通过在编码中增加一位校验位,使编码中1的个数为奇数(奇校 验),为偶数(偶校验)。
海明码:在数据位中插入 i 个校验码,通过扩大码距来实现检错和纠错。 (1)第i位校验码的位置2i-1; (2)校验码 Pi (位置k)的校验位:从Pi 算起,校验k位,跳过k位,再校验k位, 跳过k位... (3)Pi =各校验位的异或(偶校验,不包括 Pi)
记忆和转换原码、反码、补码和移码其实很简单!

记忆和转换原码、反码、补码和移码其实很简单!最近在备战软考,复习到计算机组成原理的时候,看到书中关于原码、反码、补码和移码的定义异常复杂。
看完这些定义以后,我的脑袋瞬间膨胀到原来的二倍!这样变态的公式不管你记不记得住,反正我是记不住!还好,以前对它们有所了解,否则看到这一堆公式,恐怕我早就放弃参加软考的念头了。
其实,没必要弄得这么麻烦,它们完全可以用一两句话就描述得很清楚。
原码:如果机器字长为n,那么一个数的原码就是一个n位的二进制数有符号数,其中最高位为符号位:正数为0,负数为1。
剩下的n-1位为数值位,表示真值的绝对值。
凡不足n-1位的,小数在最低位右边加零;整数则在最高位左边加零来补足n-1位。
例如:X = +101011,[X]原= 0010 1011;X = -101011,[X]原= 1010 1011。
注意:正数的原、反、补码都一样。
0的原码跟反码都有两个,因为这里0被分为+0和-0。
反码:知道了原码,那么你只需要具备区分0跟1的能力就可以轻松求出反码。
因为反码就是在原码的基础上,符号位不变,其他位按位取反(就是0变1,1变0)就可以了。
例如:X = -101011,[X]原= 1010 1011,[X]反= 1101 0100。
补码:补码也非常简单,就是在反码的基础上,按照正常的加法运算加1。
例如:X = -101011,[X]原= 1010 1011 ,[X]反= 1101 0100,[X]补= 1101 0101。
也可以在原码的基础上,符号位不变,从右至左遇到第一个1以前(包括这个1)什么都不变,以后按位取反即可。
[X]原= 1000 0110,[X]补= 1111 1010注意:0的补码是唯一的,如果机器字长为8,那么[0]补=0000 0000。
移码:移码最简单了,不管正负数,只要将其补码的符号位取反即可。
例如:X = -101011,[X]原= 1010 1011,[X]反= 1101 0100,[X]补= 1101 0101,[X]移= 0101 0101。
编码方式

几种机器编码简便方法对比
机器码
原码 补码
真值为正数
符号位为零,等于真值本身 符号位为零,等于真值本身
真值为负数
符号位为一,数值位为真值本身 简便编码方法:加符号位 符号位为一,逐位取反,末位加一
反码
移码
符号位为零,等于真值本身
符号位为一,逐位取反
符号为一,数值位为真值本身 符号位为零,数值位逐位取反,末位加一
题目:1、有符号数的表示有原码、反码、补码和移 码四种编码方式,请详细阐述四种编码方式及特点。
1、原码表示法
最高位表示符号,其余位表示数值。 即原码为符号位加上数的绝对值,0正1负;
(1)定点小数 若定点小数的原码形式为 x0. x1 x2 ··· xn,(共n+1位)则原码表 示的定义是:
[x]原 = (2)定点整数 若定点整数的原码形式为 x0 x1 x2 ··· xn,则原码0001111
-00001111
+0.00001111
-0.00001111
原码 补码
反码 移码
000001111 000001111
000001111 100001111
100001111 111110001
111110000 011110001
0.00001111 0.00001111
例:
x = 0.10110
[x]反=
-0.10110
0.10110
1.01001
结论:
负数反码为符号位跟每位数的反,0正1负;
反码零有两个编码,+0 和 -0 的编码不同; 反码难以用于加减运算;
反码的表数范围与原码相同。
3、补码表示法
(1)定点小数 若定点小数的补码形式为 x0. x1 x2 ··· xn,则补码表示的定义是: x 0 x < 1 [x]补 = -1 x 0 2 + x = 2 – |x| 例:
原码、反码与补码知识讲解

原码、反码与补码知识讲解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.原码原码在存储⽅式上,最⾼位是符号位,其他位是数值位。
如:正数原码:3 对应的⼀个字节的原码:0000 0011B负数原码:-3 对应的⼀个字节的原码:1000 0011B特殊点的是0的存储,0有两种存储⽅式:+0 对应的⼀个字节的原码:0000 0000B-0 对应的⼀个字节的原码:1000 0000B注:计算机中的负数不是以原码的⽅式存储的,⽽是补码。
2.反码反码在存储⽅式上也是最⾼位时符号位,其他位是数值位。
如:正数反码:3 对应的⼀个字节的反码:0000 0011B //没错,反码正数的表⽰⽅式跟原码是⼀样的负数反码:-3 对应的⼀个字节的反码:1111 1100B //负数则符号位为1,数值位是原码的按位取反特殊点跟原码⼀样,0的存储在反码也有两种存储⽅式:+0 对应的⼀个字节的反码:0000 0000B-0 对应的⼀个字节的反码:1111 1111B3.补码补码在存储⽅式同上,最⾼位时符号位,其他位是数值位。
但是,最⾼位既是符号位,也是数值位。
如:正数补码:3 对应的⼀个字节的反码:0000 0011B //没错,补码的正数与原码、反码⼀样。
负数补码:-3 对应的⼀个字节的反码:1111 1101B //负数则符号位为1,数值位是反码加上1求补码的负数过程即:(1)先求反码(2)求得的反码加上1(3)完成如已知的⼀个负数的把补码是0XFFFF,想要知道它是负多少,可以这么求:1111 1111 1111 1111B反码得:0000 0000 0000 0000B加1得:0000 0000 0000 0001B得出:1D再加上它表⽰的是⼀个负数的,所以结果是-1D。
补码的0就只有⼀种存储⽅式:0000 0000B计算机的数值就是采取补码的⽅式存储的。
总结:原码、反码、补码在正数的存储⽅式上是⼀样的。
不同的是负数,不过也有⼀点共同点,就是符号位都是⽤1来表⽰这个数是负数。
原码反码补码移码的关系(精简总结)

原码反码补码移码的关系(精简总结)依然是为了避开那些繁琐复杂晦涩的概念与术语,为了确保能清晰的梳理它们之间的关系,现分为两部分说明1. 机器数是正数符号位为0
原码 = 反码 = 补码
eg:机器码长度为8,求X(6)10原码反码补码移码
[X]原 = 00000000+110=00000110
[X]补=[X]反=[X]原 =00000110
[X]移=10000110
(绿⾊为符号位)
2.机器数是负数符号位为1
反码 = 原码(符号位除外)各位取反⽽得到
补码 = 原码(除符号位外)各位取反,并在未位加1⽽得到
eg:机器码长度为8,求X(-6)10原码反码补码移码
[X]原 = 10000000+110=10000110
[X]补=11111001 +1=11111010
[X]反=11111001
[X]移=01111010
(绿⾊为符号位)
=============================
移码 = 补码的符号位直接取反
=============================
应⽤⽰例
已知补码求原码
原码 = 补码取反加1 (符号位除外)
[X]补=1101001 求[X]原。
[X]原 = 1010110+1 =1010111
总结:在换算过程中符号位始终保持不变(移码除外)。
依然⾼端⼤⽓上档次!
如果有错误敬请指出,反正我也不⼀定改!。
原码反码补码

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。
原码,反码,补码,和取反运算——适用于二进制底层的概念理解

原码,反码,补码,和取反运算——适⽤于⼆进制底层的概念理解⾸先,看这篇⽂章之前,你需要的是不必纠结,⽐如:为什么正数的原码反码补码就⼀样呢,负数的原码反码补码就各不相同呢?看这篇⽂章之前你只需要记住,这是⼈为规定的。
你可能会想,为什么要这样⼈为规定呢,我现在只能告诉你,这样规定有利于计算机底层对数字进⾏操作,也就是说,这种规定对计算机的底层硬件要求简化了,技术实现起来更简单。
我们⽇常⽤的数字是给我们⼈类⽤的,所以叫真值。
⽽机器(计算机)理解的数字通常是⼆进制所组成的数字,所以称为机器数。
⼆进制在内存中以补码形式在其中存储,计算机计算数字是通过补码的形式进⾏计算的,也就是说不管正数,还是负数在计算机⾥⾯,都要⽤补码来表⽰。
在原码,反码,补码中,最⾼位来表⽰正负,⽤0表是正,1表⽰负;如⼗进制的10表⽰为:+1010--->原码:0 1010;-1010--->原码: 1 1010;笔记⼀:原码,反码,补码*规则:正数中:原码=反码=补码;例⼦拿上⾯的:+1010---> 0 1010;+1010--->原码: 0 1010;(最⾼位0表⽰正号)+1010--->反码: 0 1010;+1010--->补码: 0 1010;+1010--->移码: 1 1010(补码符号位取反)负数中的规则如下:例⼦拿上⾯的:-1010---> 1 1010;-1010--->原码: 1 1010;(最⾼位1表⽰负号)-1010--->反码: 1 0101;(符号位不变,数值位:0变1,1变0)-1010--->补码: 1 0110;(符号位不变,数值位:0变1,1变0。
最后得出来的数字再加1。
简单点总结为:“反码加1”)-1010--->移码: 0 0110(补码符号位取反)最后注释:移码:⽆论正负数,都是补码的符号位取反。
还有这⾥解释⼀下,为什么计算机实际计算数字是⽤补码进⾏运算的,如果你看了我上⾯的例⼦的话,应该清楚了,不管是正数,还是负数,在计算机中,补码最⾼位都是1,意思就是说,补码的作⽤,把正数规定还是正数,⽽负数还是负数,但是正负数进⾏运算的时候转变为加法形式,例如:3-5变成3+(-5).这样⼦,计算机底层很容易实现加法运算。