-
2022-03-17 23:24:40
本文主要讲解计算机的原码, 反码和补码.的概念,以及原码反码的表示形式,以及原码反码补码之前如何相互转换,还有计算机中数字是怎么样存储的。
原码:
假设机器字长为n,原码(自然二进制码)是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。
反码:
反码通常是用来由原码求补码或者由补码求原码的过渡码。在原码的基础上,正数的补码反码是其本身,负数的反码是符号位保持不变,其余位取反。
补码:
正数的补码是其本身,负数的补码是在其反码的基础上+1。
比如数字6:
原码:00000000 00000000 00000000 00000110
反码:00000000 00000000 00000000 00000110
补码:00000000 00000000 00000000 00000110
比如数字-6:
原码:10000000 00000000 00000000 00000110
反码:11111111 11111111 11111111 11111001 (符号不动 其余取反)
补码:11111111 11111111 11111111 11111010 (反码+1)
以上的数字6和数字-6都是int类型的(32位)
注意: 反码是一种表示形式 取反是一个计算过程(每一个位置都取反)
总结:
对于有符号的而言:
1.二进制的最高位是符号位:0表示正数,1表示负数。
2.正数的原码、反码、补码都一样。
3.负数的反码:原码符号位不变,其它为取反(0变1, 1变0)。
4.负数的补码:它的反码 +1。
5.0的反码、补码都是0。
6.计算机中不管是证书还是负数,在计算机中是以补码形式存储的。
更多相关内容 -
计算机 原码 反码 补码
2021-09-12 12:24:45由于基础知识不牢进行补脑 以下举例无特殊说明,都是以8位为例。...0000 0001 表示+1的原码1000 0001 表示-1的原码 反码 反码的定义:正数的反码是其本身。负数的反码,除符号位外取反。 举例: [+1]...由于基础知识不牢进行补脑
以下举例无特殊说明,都是以8位为例。
符号位
符号位定义:在内存或寄存器中最高位定义为符号位,1表示负数、0表示正数。
举例:在byte中一共有8个位。
0000 0001 表示的是正数,最高位为 0 即是正数
1000 0001 表示的是负数,最高位为 1 即是负数原码
原码定义:
0000 0001 表示 +1的原码
1000 0001 表示 -1 的原码反码
反码的定义:
正数的反码是其本身。
负数的反码,除符号位外取反。举例:
[+1] 0000 0001 反码为 0000 0001
[-1] 1000 0001 反码为 1111 1110,需要注意的是符号位。补码
补码的定义:
正数的补码为原码。
负数的补码为原码的反码 + 1。举例:
+1 的原码为 0000 0001,
+1 的反码为 0000 0001,
+1 的补码为 0000 0001.-1 的原码为 1000 0001,
-1 的反码为 1111 1110,
-1 的补码为 1111 1111.以上是关于 原码、反码、补码的定义。
那么计算机为什么用 原码、反码、补码呢?原因是减法,具体详情
计算机在存储整数时,储存的都是整数的补码。
计算机在存储整数时,储存的都是整数的补码。
计算机在存储整数时,储存的都是整数的补码。
这是数学科学家为解决减法问题,在CPU中使用加法器而设计的补码,实现减法。下面用4个位做介绍,原理都是一样的,不想用8位介绍的原因是,字面上过多的0或1给视觉造成干扰。
对于计算机中的二进制,最高位是 0,我们知道这个数是正整数,可以计算出这个数的十进制。
例如:0010,计算十进制为(最高位为符号位,不参与运算) 0*2^2 + 1*2^1 + 0*2^0 = 2因为正数的原码、反码、补码定义为本身,可以用上面计算方法得出十进制值,
可是对于一个负数呢?
例如:1110,首先最高位为1,可以判定这个数为负数,并且这个二进制在计算机中是一个负数的补码,所以不容易从表面直观看出这个数的十进制,所以要转换成原码。负数的补码 = 原码->补码(取反码 + 1);
负数的原码 = 补码 >补码(取反码 + 1);求补码的原码(以下例子是一个负数的补码)
反码 :
1110
1001
加1:
1001
1010
最终得到原码 1010,最高位为1表示是负数,后面的三位二进制是 010,
010 计算十进制为(最高位为符号位,不参与运算) 0*2^2 + 1*2^1 + 0*2^0 = 2,因为最高位为1,
所以1110的十进制是 -2。二进与十六进制
以下是个人的方便记忆的快速理解,不代表科学性,仅供参考。
用十六进制表示负数
在 4位中 -1 的补码为 1111,
1111 所有位计算值为 1*2^3+1*2^2+1*2^1+1*2^0 = 15 = 0XF(十六进制)
在 8位中 -1 的补码位 1111 1111,那么十六进制为 0XFF思考
1000 0000 是多少呢?
-
计算机原码反码补码_0
2021-07-28 11:17:25《计算机原码反码补码_0》由会员分享,可在线阅读,更多相关《计算机原码反码补码_0(3页珍藏版)》请在人人文库网上搜索。1、计算机原码反码补码在数学中是将正号+ 负号- 放在绝对值前边表示该数是正数还是负数的,...《计算机原码反码补码_0》由会员分享,可在线阅读,更多相关《计算机原码反码补码_0(3页珍藏版)》请在人人文库网上搜索。
1、计算机原码反码补码在数学中是将正号+ 负号- 放在绝对值前边表示该数是正数还是负数的,计算机只能识别0和1,使用的是二进制。计算机中就用一个数的最高位作为符号位,并用0表示正数,1表示负数。这样数的符号也可以用数字表示了。在计算机中,负数的二进制有3种表示方法:原码、反码和补码。任何正数的原码反码和补码形式完全相同,而负数则有各种不同的表示形式。 那么在计算机中,我们用二进制来表示数,所有的数可以分成两部分。一部分是符号,另一部分是数值,所以用二进制表示出来的数也就有了符号位和数值位之分。如果只表示一个数,我们称之为:真值;既有数又有符号的我们称之为机器码。 正整数: 原码,补码,反码的符号位。
2、固定为0,数值位都是真值。所以一个正整数的原码,补码,反码是相同的。 负整数: 原码,补码,反码的符号位固定为1不变,数值位不相同。 原码的数值位是真值; 反码:原码数值位的每一位二进制数位求反得到; 补码:反码数值位最低位加1得到。 一原码 8 原码:0000,1000 -8 原码:1 000,1000 二反码 8 反码:0 000,1000 -8 反码:1 111,0111 三补码 8 补码:0 000,1000 -8 补码:1 111,1000 为什么要用到原码、反码、补码 原码求和运算的问题: 假设字长为8bits 十进制 (1) 10 - (1)10 = (1)10 + (-1)10。
3、 = (0)10 按照原码的表示规则,十进制的1 的原码是 00000001, 十进制的-1 原码是 10000001 二进制 (0 0000001)原 + (1 0000001)原 = (1 0000010)原 = ( -2 ) 显然不正确。 当1-1 就相当于 1+(-1) 执行二进制运算时结果为10000010 是-2 结果是错误的! 解决问题方案: 在两个整数的加法运算中是没有问题的,于是就发现问题出现在带符号位的负数身上。对除符号位外的其余各位逐位取反就产生了反码。反码的取值空间和原码相同且一一对应。 反码的减法运算: 十进制: (1)10 - (2)10 = (1)10 + (-2。
4、)10 = (-1)10 二进制: (0 0000001)反 + (1 1111101)反 = (11111110)反 = (-1) 正确。 反码求和运算的问题: 十进制: (1)10 - (1)10 = (1)10 + (-1)10 = (0)10 二进制:(0 0000001)反 + (1 1111110)反 = (1 1111111)反 = ( -0 ) 有问题。 问题出现在(+0)和(-0)上,在人们的计算概念中零是没有正负之分的。 补码求和运算: 负数的补码就是对反码加一,而正数的补码不变,正数的原码反码补码是一样的。 十进制: (1)10 - (1)10 = (1)10 + (-1)10 = (0)10 二进制:(0 0000001)补 + (1 1111111)补 = (0 0000000)补 = ( 0 ) 正确。 十进制:(1)10 - (2)10 = (1)10 + (-2)10 = (-1)10 二进制:(00000001)补 + (11111110)补 = (11111111)补 = (-1) 正确。 所以补码的设计目的是: 使符号位能与有效值部分一起参加运算,从而简化运算规则。补码机器数中的符号位,并不是强加上去的,是数据本身的自然组成部分,可以正常地参与运算。 使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计。。
-
一个数的原码,反码,补码怎么算,原码 反码 补码
2021-07-27 06:36:08原码、反码、补码都是有符号定点数的表示方法。一个有符号定点数的最高位为符号位,0是正,1是副。以下都以8位整数为例,原码就是这个数本身的二进制形式。例如0000001 就是+11000001 就是-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.0010 //负数时,反码为原码取反
补码:1.0011 //负数时,补码为原码取反+1
总结:
在计算机内,定点数有3种表示法:原码、反码和补码
所谓原码就是前面所介绍的二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
1、原码、反码和补码的表示方法
(1) 原码:在数值前直接加一符号位的表示法。
例如: 符号位 数值位
[+7]原= 0 0000111 B
[-7]原= 1 0000111 B
注意:a. 数0的原码有两种形式:
[+0]原=00000000B [-0]原=10000000B
b. 8位二进制原码的表示范围:-127~+127
2)反码:
正数:正数的反码与原码相同。
负数:负数的反码,符号位为“1”,数值部分按位取反。
例如: 符号位 数值位
[+7]反= 0 0000111 B
[-7]反= 1 1111000 B
注意:a. 数0的反码也有两种形式,即
[+0]反=00000000B
[- 0]反=11111111B
b. 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来代替,这就把减法问题转化成加法问题了(注:计算机的硬件结构中只有加法器,所以大部分的运算都必须最终转换为加法)。10和2对模12而言互为补数。
同理,计算机的运算部件与寄存器都有一定字长的限制(假设字长为8),因此它的运算也是一种模运算。当计数器计满8位也就是256个数后会产生溢出,又从头开始计数。产生溢出的量就是计数器的模,显然,8位二进制数,它的模数为28=256。在计算中,两个互补的数称为“补码”。
2)补码的表示: 正数:正数的补码和原码相同。
负数:负数的补码则是符号位为“1”,数值部分按位取反后再在末位(最低位)加1。也就是“反码+1”。
例如: 符号位 数值位
[+7]补= 0 0000111 B
[-7]补= 1 1111001 B
补码在微型机中是一种重要的编码形式,请注意:
a.采用补码后,可以方便地将减法运算转化成加法运算,运算过程得到简化。正数的补码即是它所表示的数的真值,而负数的补码的数值部份却不是它所表示的数的真值。采用补码进行运算,所得结果仍为补码。
b.与原码、反码不同,数值0的补码只有一个,即 [0]补=00000000B。
c.若字长为8位,则补码所表示的范围为-128~+127;进行补码运算时,应注意所得结果不应超过补码所能表示数的范围。
-
原码和补码的换算(原码反码补码转换工具)
2021-02-11 21:15:44[-3]反=[10000011]反=11111100 原码 反码 负数的补码是将其原码除符号位之。两个说法都没有错,我们举个例子来看看就明白了:1、10001的补码是取反后在再加1,也就是11110+1=11111;2、如果是11111变回原码呢?我们... -
原码 反码 补码的简单计算附例题
2020-07-01 17:31:02原码 反码 补码 对计算机中常见数据简单分类 机器数 与 真值 原码 反码 补码 扩展 对计算机常见数据的分类 机器数 就是数值在计算机中的二进制表现形式 机器数在计算机中有符号,使用 最高位表示符号 , 使用0 表示... -
原码 反码 补码
2021-10-21 20:17:12原码,反码,补码的产生过程,就是为了解决计算机做减法和引入符号位的问题。 原码 原码是最简单的机器数表示法。用最高位表示符号位,‘1’表示负号,‘0’表示正号。其他位存放该数的二进制的绝对值。 0001+0010... -
原码、反码、补码知识总结
2020-08-10 19:03:36数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负).这就是机器数的原码了.因为在两个整数的加法运算中是没有问题的,于是就发现问题... 负数的补码就是对反码加一,而正数不变,正数的原码反码补码是一样的. -
原码反码补码的用途
2021-07-27 05:50:16“16位二进制表示的原码、反码、补码的最大、最小十进制数的范围”2.计算机中16位浮点数的表示格式为0 3 4 15阶码尾数(含尾符)某机器码为1110001010000000。若阶码为移码且尾数为反码,其十进制真值为A3.求+12和-12... -
计算机原码,补码和反码
2021-10-14 11:33:20在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1、机器数 一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如... -
python原码反码补码
2021-07-19 21:42:27原码反码补码2.1 正数:2.2 负数2.3 计算机中实现1-1 1. 计算机计算的逻辑 计算机只能识别二进制码。 计算机是使用补码进行计算 计算机中是加法运算 计算机存储的二进制位,最高位为符号位。 2. 原码反码补码 2.1... -
golang 原码 反码 补码
2022-01-27 17:47:051===》原码(0000 0001) 反码(0000 0001) 补码(0000 0001) -1===》原码(1000 0001)反码(1111 1110) 补码(1111 1111) 4.负数的补码=它的反码+1 5.0的反码,补码都是0 6.在计算机运算的时候 -
c语言中的原码 反码 补码
2021-05-20 11:19:35陈独秀的秘密所谓原码就是前面所介绍的二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余...1、原码、反码和补码的表示方法(1) 原码:在数值前直接加一符号位的表示法。例如: 符号位 数值位[+7... -
原码反码补码移码
2021-08-12 10:33:29原码: 数值直接转为二进制数,...①正数的反码和原码相同 ②负数的反码,在原码基础上,符号位不变,其余各位取反 以8位为例: -1的反码为1111 1110 -127的反码为1000 0000 -0的反码为1111 1111 补码: ①正 -
计算机原码 反码 和 补码
2021-05-28 10:37:03一个数在计算机中的二进制表示,叫做这个数的机器数。在计算机中最高位为符号位。0代表正数,1代表负数。 +1 机器数(8位):0000 0001 -1 机器数(8位):1000 0001 补充 计算机存储最小单位,位(bit) 1位=1bit ... -
原码反码补码之间运算转换
2021-09-26 17:22:533. 0 在计算机种分+0与-0,它们的原码,补码,反码如下 [+0]原码=0000 0000, [-0]原码=1000 0000; [+0]反码=0000 0000, [-0]反码=1111 1111; [+0]补码=0000 0000, [-0]补码=0000 0000。 +0和-0... -
[例题详解]真值 机器数概念 | 原码 反码 补码 移码 概念及加减计算
2021-10-25 00:01:32含大量手写笔记,逻辑清晰,讲解原码、反码、补码、移码等概念,上计算机组成原理课程时候整理的复习笔记 -
原码 反码 补码的计算
2021-09-27 22:10:51正整数的原码反码补码都是相同的 负整数,例如 -1: 原码100000000000000000000000000000000001 首位是字符位,负数取1,正数取0 反码111111111111111111111111111111111110 较于原码除字符位,其余位置取反 ... -
c语言十四:原码 反码 补码
2022-02-25 15:43:32原码 反码 补码一 计算机用补码的作用1是 把减法运算变成加法运算二 计算机用补码的作用2是统一了-0和+0的编码三 查看内存中原样数据四 数据的存储4.1 有符号负数4.2 有符号正数4.3 十六进制数4.4 八进制数4.5 越界... -
原码反码补码
2020-06-30 17:34:091、对计算机中常见数据简单分类 数据分类: (1)数值类型:1.整数:正整数、负整数; 2.浮点数 (2)非数值类型: 图片、视频、音频、文字 2、机器数 与 真值 机器数 就是数值在计算机中的二进制表现形式 机器数在... -
java基础-原码反码补码
2020-02-01 11:02:10原码反码补码是计算机存储一个具体数字的编码方式。 原码: 第一位表示符号位,其余位表示真值 [+1]原= 0000 0001 [-1]原 =1000 0001 反码: 正数的反码跟原码相等 反码计算:在符号位不变的基础上,其余... -
原码反码补码的转换方法
2021-05-13 17:11:39注意:下面内容中的数字均用8位二进制数表示。 原码 最高位(最左边)代表符号位,0代表正数,1代表负数。 例: 1 的原码是 0000 0001 ...-1 的原码是 1000 0001 ...计算机数字运算均是基于补码的。 单字 -
原码反码补码的溢出判断
2021-10-05 17:17:29右移:可能会丢失精度 左移:可能会出现严重误差 溢出判断 正数:正补反左移和右移都是丢1出错 负数:原码:左移或右移丢1出错 反码:左移或右移丢0出错 ...故负数补码左移与反码相同,右移与原码相同。 ... -
C语言基础 原码、反码、补码和移码详解
2020-12-31 19:49:26原码、反码、补码、移码的作用? 在计算机内,机器数有无符号和带符号数之分。无符号数表示正数,在机器数中没有符号位。位于无符号数,若约定小数点的位置在机器数的最低位之后,则是纯整数;若约定小数点的位置... -
Java机器数之原码反码补码
2021-03-17 11:40:29机器数之原码反码补码基本概念字在计算机中,一串数码作为一个整体来处理或运算的,称为一个计算机字,简称字。字通常分为若干个字节(每个字节一般是8位)。在存储器中,通常每个单元存储一个字,因此每个字都是可以... -
原码 反码 补码的相互转换
2019-08-10 17:51:13原码 反码 补码的相互转换 原码 反码 补码的转换 还是比较 简单基础的问题。之前学习java的时候就学过,后来忘记了,忘记了!!!,后来学了位移运算符,左移 右移 无符号右移 之后就由有点儿懵了。 原码,反码,... -
原码 反码 补码三者之间的关系
2021-06-02 11:33:07在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以用补码统一处理。 原码:使用二进制表示,二进制首位是符号位,0为正,1为负 反码:正数...