一.机器数和真值
- 机器数
-
一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1。
- eg. 十进制7机器数就是0000 0111,十进制-7机器数就是1000 0111。
- 真值
- 将带符号位的机器数对应的真正数值称为机器数的真值。就是上面例子里的7和-7。
- 因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 1000 0111,其最高位1代表负,其真正数值是 -7 而不是形式值135(1000 0011转换成十进制等于135)。
二.原码 反码 补码的基本概念和计算方法
- 原码
-
原码就是符号位加上真值的绝对值(就是机器数), 即用第一位表示符号, 其余位表示值。
[7]=[0000 0111]原
[-7]=[1000 0111]原
-
原码是人脑最容易理解和计算的表示方式。
- 反码
- 正数的反码是其本身。
[7]=[0000 0111]原=[0000 0111]反
- 负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。
[-7]=[1000 0111]原=[1111 1000]反
- 补码
- 正数的补码就是其本身。
[7]=[0000 0111]原=[0000 0111]补
- 负数的补码是在反码的基础上+1。
[-7]=[1000 0111]原=[1111 1001]补
- 对于负数, 补码表示方式是人脑无法直观看出其数值的。
三.为何要使用原码 反码 补码
- 两个数做加减的时候,人脑很自然的会区分正负数并做相应运算。但计算机里面,只有加法器,没有减法器,所有的减法运算,都必须用加法进行,而且是保留符号位的加法运算。于是产生了反码 补码。
- 先看看三种运算:
- 原码运算。如果用原码表示,让符号位也参与计算,显然对于减法来说,结果是不正确的。这也就是为何计算机内部不使用原码表示一个数。
1 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [1000 0010]原 = -2
- 反码运算。发现用反码计算减法,结果的真值部分是正确的。而唯一的问题其实就出现在"0"这个特殊的数值上. 虽然人们理解上+0和-0是一样的,但是0带符号是没有任何意义的。而且会有[0000 0000]原
和[1000 0000]原
两个编码表示0。
1 - 1 = 1 + (-1) = [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原 = -0
- 补码运算。解决了0的符号。
1 - 1 = 1 + (-1) = [0000 0001]补 + [1111 1111]补 = [0000 0000]补 = [0000 0000]原 = 0
四.-128的补码问题
- 假设机器能处理的位数为8,即一个字节,如果不考虑最高位用做符号位的情况,8位可以表示的数据区间是0000 0000 - 1111 1111,即0-255,共256个数据。
- 如果考虑最高位用做符号位的情况,8位可以表示的数据区间是1111 1111 -1000 0000和0000 0000 - 0111 1111,即-127 - -0和+0 - 127,共256个数据。
- 在原码和反码中,数据的区间为-127 - -0和+0 - 127;在补码里面用-128代替了原码和反码里的-0,补码范围变成了-128 - 0 - 127。
- 补码里面用-128代替了原码和反码里的-0产生了什么
原码和反码里面:[-0] = [1000 0000]原 = [1111 1111]反 = [1000 0000]补
补码里面:-128代替上面的[-0]==========>[-128] = [1000 0000]补,但-128并没有原码和反码表示。
-
(-1) + (-127) = [1000 0001]原 + [1111 1111]原 = [1111 1111]补 + [1000 0001]补 = [1000 0000]补 = -128
五.补码的设计目的
- 使符号位能与有效值部分一起参加运算,从而简化运算规则。
- 使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计。
六.补码的原理分析
见参考文章http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html
同时感谢参考文章。
分享到:
相关推荐
原码、反码和补码是二进制表示正负数的关键概念,它们主要用于无符号整数和有符号整数的表示。以下是对这些知识点的详细解释: 1. **原码**:原码是最直观的二进制表示,其中最高位(称为符号位)为0表示正数,为1...
原码反码补码讲课 计算机中的数值表示是计算机基础知识的重要组成部分。在计算机中,数值可以分为整数和实数两大类。整数又可以分为无符号整数和带符号整数。无符号整数是指不带符号的整数,而带符号整数则是带有...
原码反码补码是计算机系统中最基本的概念之一,了解原码反码补码的原理和应用对于计算机科学和技术的学习非常重要。本资源摘要信息将对原码反码补码的概念、特点和应用进行详细的介绍。 一、机器数与真值 机器数是...
/* *功能实现任意二进制数的原码 反码 补码转换 *仅仅是字符串的操作,没有进行数字操作 *对-0的操作可能有问题 *ssfshine@gmail.com */
二进制原码反码补码知识点总结 ...二进制原码反码补码是计算机中表示数值的三种方式,它们之间的转换是非常重要的。计算机的数制转换是一个非常重要的知识点,包括二进制、八进制、十六进制、十进制之间的换算。
在计算机科学中,原码、反码和补码是用于表示二进制数值,特别是负数的三种方式。本文将详细讲解这三种编码方式,并通过C#编程语言演示如何进行三码之间的转换。 1. 原码(Direct Code): 原码是最直观的二进制...
原码反码补码图解.原码反码补码图解.原码反码补码图解.
在计算机科学中,二进制表示的数字有三种主要形式:原码、反码和补码,主要用于表示有符号整数。本项目是基于C++的MFC(Microsoft Foundation Classes)框架实现的一个实用工具,旨在帮助用户理解并进行原码、反码和...
"二进制-原码-补码-反码" 在计算机科学中,二进制数是计算机中最基本的表示形式。为了能够正确地表示和处理有符号数和无符号数,计算机科学家们提出了原码、反码和补码三种表示方法。 原码是指在二进制数的最高位...
"原码反码补码说课.pptx" 本资源是关于计算机组成原理的教学课件,主要讲解了原码、反码和补码的概念、计算方法和表示范围。该课件旨在培养学生实事求是的学风、耐心细致的工作作风和严谨的工作态度。 一、知识...
原码、反码和补码是计算机中用来表示有符号整数的重要概念,它们主要用于二进制数的存储和计算,特别是在计算机硬件中简化运算过程。以下是对这些概念的详细解释: 1. **原码**: 原码是最直观的表示方式,直接在...
"学习电脑信息原码反码补码详细解析" 本文详细介绍了原码、反码和补码的概念、计算方法和应用场景。在学习原码、反码和补码之前,需要了解机器数和真值的概念。机器数是指一个数在计算机中的二进制表示形式,带符号...
16进制(4位)到二进制原码、反码、补码计算
本文档主要涵盖了进制转换及原码反码补码的相关知识点,包括二进制、八进制、十进制、十六进制之间的转换关系,原码、反码、补码的概念和计算方法,以及相关的练习题和解析。 一、进制转换 1.1、二进制转十进制 ...
进制转换及原码反码补码 在计算机系统中,数字系统是基础部分,很多计算机科学家和程序员需要熟悉不同的数字系统和它们之间的转换。下面我们将详细介绍进制转换、原码、反码和补码的概念和应用。 一、进制数的表达...
原码、补码和反码是三种常见的二进制表示法,主要用于表示有符号整数,而按位运算则是对二进制数进行操作的基础手段。下面将详细阐述这些概念。 一、原码(正码) 原码是最直观的二进制表示方法,直接反映了数字的...
了解二进制数据编码:原码、反码、补码。 掌握数据的进制转换:二进制、八进制、十进制、十六进制。 掌握位运算:与(&)、或(I)、非(!)、异或()、左移( )、右移(>>)的基本 了解算法的概念,熟练运用自然语言、流程图、伪...
负数的补码就是对反码加一,而正数不变,正数的原码反码补码是一样的。在补码中用(-128)代替了(-0),所以补码的表示范围为:(-128~0~127),共 256 个。注意:(-128) 没有相对应的原码和反码,(-128) = ...
在深入探讨计算机中表示有符号整数的原码、反码和补码之前,让我们先回顾一下计算机存储数据的基本单位——字节。正如文中所述,一个字节由8位组成,每位可以是0或1,因此一个字节可以表示\(2^8 = 256\)种不同的状态...
在8位二进制的补码表示中,存在一个特殊情况,即-128(1000 0000),这个值没有对应的原码和反码表示,因为-128的补码就是其本身,且在原码中,如果最高位是0,则无法表示-128。这种设计是为了避免在处理负数时出现...