原码、反码和补码

什么是数制?用来表示数值的规则,如十进制,二进制.

机器数

用二进制的形式来表示数;最高位为符号位,1表示负数,0表示正数.

如:  1---->00000001;-1---->1000 0001

真值

从上面我们知道了机器数是计算机用来表示数的一种形式,但是用于最高位是符号位。这样就出现这样情况,1000 0001表示的真正数值为1,而不是129.这样我们把一个机器数表示的真正的实际的意义的值称之为真值。

原码、反码、补码

总体上来讲原码反码补码都是计算机本身用来存储数的一种方式。

原码

规则:符号位+真值的绝对值

如:[+1]原码=0000 0001;

[-1]原码=1000 0001;

反码

规则:正数反码为本身

负数反码为原码的取反,但符号位不变

如:[+1]原码=[+1]反码=0000 0001;

[-1]原码=1000 0001=[-1]反码=1111 1110;

补码

规则:正数补码为本身

负数补码为原码的反码的基础之上加1

如:[+1]原码=[+1]补码;

[-1]原码=1000 0001=[-1]反码=1111 1110=[-1]补码=1111 1111;

为何会出现三种表示方式?

通过上面三种我们得到正数1在各种情况下都是一致的:[+1]原\反\补码=0000 00001;

而反码不是一致的。

在计算机内部,为了将运算变得简单。将符号位也投入到运算之中来,这样不需要计算机去分析符号位的作用。但是我们发现

[+1]原码=0000 0001+[-1]原码=1000 0001=0000 00001=1;而不是0,这样一来就出现了错误。如何解决这个问题呢?

为了解决这个问题,反码出现了

[+1]原码+[-1]原码=1000 0001=[+1]反码=0000 0001+[-1]反码=1111 1110=0000 0000(反码)=0000 0000 (原码)=-0;

这样一来解决了原码之间运算的问题,但是问题又出现了-0=1000 0000(原码);+0=0000 0000 (原码);这样在计算机看来不一样。是没有意义的。

[+1]原码+[-1]原码=1000 0001=[+1]补码=0000 0001+[-1]补码=1111 1111=0000 0000(补码)=[0000 0000](原码)

这样用[0000 0000](原码)表示0就不会出现问题了。

总的来说,在整数中,原码和补码、反码都是一样的,对于负数反码在符号位不变的情况下各位取反所得;补码为反码基础上加1.而原码补码反码的出现都是为了满足在计算机在运算过程更加简单和便捷而出现的。

时间: 2024-08-01 11:00:09

原码、反码和补码的相关文章

原码, 反码与补码基础知识详细介绍_C 语言

原码, 反码,补码详解 本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助! 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1.机器数 一个数在计算机中的二进制表示形式,  叫做这个数的机器数.机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如,

原码反码补码

原文:原码反码补码 原码:  -16  =  10010000    1表示符号位(1负0正) 反码:  -16  =  11101111    补码:  -16  =  11110000   原码:   9  =  00001001    1表示符号位(1负0正) 反码:   9  =  00001001   补码:   9  =  00001001   -16 + 9 11110000 +  00001001    11111001(补码)   11111001的反码 10000110 11

深入理解计算机系统-之-数值存储(三)-- 原码、反码、补码和移码详解

原码 如果机器字长为n,那么一个数的原码就是用一个n位的二进制数,其中最高位为符号位:正数为0,负数为1.剩下的n-1位表示概数的绝对值. PS:正数的原.反.补码都一样:0的原码跟反码都有两个,因为这里0被分为+0和-0. 原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制: [+1]原 = 0000 0001 [-1]原 = 1000 0001 例如: X=+101011 , [X]原= 00101011 X=-101011 , [X]原= 1010

原码、反码、补码和移码其实很简单

先上几个例子: 1011 原码:01011  反码:01011  //正数时,反码=原码 补码:01011  //正数时,补码=原码 移码:11011  //补码符号位取反 -1011 原码:11011 反码:10100  //负数时,反码为原码取反 补码:10101  //负数时,补码为原码取反+1 移码:00101  //补码符号位取反 0.1101 原码:0.1101  反码:0.1101  //正数时,反码=原码 补码:0.1101  //正数时,补码=原码 移码:1.1101 -0.1

基础野:细说原码、反码和补码

Brief   说来惭愧虽然刚接触计算机时已经学过原码.反码和补码的内容,但最近重温时却发现"这是什么鬼东西",看来当初只是应付了考试了而已.本篇将试图把他们说个明白,以防日后自己又忘记了.   在深入之前,我们先明确以下几点:   1. 本篇内容全部针对有符号数整数:   2. 对于有符号数整数,其在计算机中的存储结构是 符号位 + 真值域.其中符号位为0表示正数,1表示负数:   3. Q:既然已经有原码,那么为什么还要出现反码.补码等数值的编码方式呢?       A:由于为了降

【转】闲扯原码、反码、补码

  来源:http://dev.csdn.net/htmls/17/17680.html 闲扯原码.反码.补码    相信大家看到这个标题都不屑一顾,因为在任何一本计算机基础知识书的第一章都有他们的解释,但是在书上我们只能找到一些简单的定义,没次看过之后不久就忘了.最近论坛里有人问起这些概念,看到很多人的回复是以前看过现在忘了去看看某某书之类,很少有给出一个合理的解释.于是本人就开始思考(虽然上帝会发笑,我还是要思考.),于是得出了以下的结论.      数值在计算机中表示形式为机器数,计算机只

内存中原码,反码,补码,查看数值范围,&,或,异或,取反,左右移位操作

 1.补码,计算机二进制在内存中如何显示的就是补码 2.查看每种数据类型的范围 如果想输出无符号整型,使用的是UINT_MAX可以得到长度. 3.原码,反码,补码 正数:原码,反码,补码都是相同的 负数:(以-1为例) 原码: 1000 0000 0000 0000  00000000 0000 0001 -1的原码 反码: 1111 1111 1111 1111  11111111 1111 1110 -1的反码(符号位不变,其它位取反) 补码: 1111 1111 1111 1111 

基础03:原码、反码、补码

本文介绍原码.反码.补码,以及为什么要使用补码.需要了解数学的取模运算. 机器数与真值 机器数,即数字在计算机中的二进制表示形式. 真值,第一位用+-表示数字的正负,其余为二进制数. 举个栗子:-3的机器数是10000011,真值是-0000011. 原码 原码,符号位加真值的绝对值. 12 +3[原] = 00000011-3[原] = 10000011 8位二进制数原码的取值范围是[11111111, 01111111],即[-127, 127] 反码 正数的反码是其原码. 负数的反码,符号

java原码、补码、反码总结

1.1. java虚拟机整数 在java虚拟机中整数有byte.short.int.long四种 分别表示 8位.16位.32位.64位有符号整数.整数使用补码表示. 所以我们先了解一下原码和反码. 1.1.1. 原码 所谓原码就是符号位加上数字的二进制表示,int为例,第一位表示符号 (0正数 1负数)简单期间一个字节表示 +7的原码为: 00000111  -7的原码为: 10000111 对于原码来说,绝对值相等的正数和负数只有符号位不同. 1.1.2. 反码 一个数如果为正,则它的反码与