对于整行是如何在计算机中存储的 ,有如下理解。
无符号数是没有原码,反码和补码的概念的。这些概念只是针对有符号数。
对于有符号数来说。正数的原码,反码和补码是相同的。对于负数,有这样的转化关系。
原码-》反码:除最高为符号位外,其余的位置按位取反。
反码-》补码:在反码的基础上在最后一位加1,符号位保持不变。
例如:有符号位的正数,表示范围是从0000 0000到0111 1111,所以正数的表示范围是0-127.在计算机中,有符号位的正数,可以理解为就是按照原码的形式存放的。
对于有符号位的负数,它们在计算机中是以补码的形式存放的。是从1000 0001到1111 1111表示-127到0.因为补码还有一个1000 0000,这个值表示-128.这是经过如下换算得来的。
(-1) + (-127) = [1000 0001]原 + [1111 1111]原 = [1111 1111]补 + [1000 0001]补 = [1000 0000]补
以下是计算机中使用补码进行运算的解释。
首先, 因为人脑可以知道第一位是符号位, 在计算的时候我们会根据符号位, 选择对真值区域的加减. (真值的概念在本文最开头). 但是对于计算机, 加减乘数已经是最基础的运算, 要设计的尽量简单. 计算机辨别"符号位"显然会让计算机的基础电路设计变得十分复杂! 于是人们想出了将符号位也参与运算的方法. 我们知道, 根据运算法则减去一个正数等于加上一个负数, 即: 1-1 = 1 + (-1) = 0 , 所以机器可以只有加法而没有减法, 这样计算机运算的设计就更简单了.
于是人们开始探索 将符号位参与运算, 并且只保留加法的方法. 首先来看原码:
计算十进制的表达式: 1-1=0
1 - 1 = 1 + (-1) = [00000001]原 + [10000001]原 = [10000010]原 = -2
如果用原码表示, 让符号位也参与计算, 显然对于减法来说, 结果是不正确的.这也就是为何计算机内部不使用原码表示一个数.
为了解决原码做减法的问题, 出现了反码:
计算十进制的表达式: 1-1=0
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.
于是补码的出现, 解决了0的符号以及两个编码的问题:
1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]补 + [1111 1111]补 = [0000 0000]补=[0000 0000]原
这样0用[0000 0000]表示, 而以前出现问题的-0则不存在了.而且可以用[1000 0000]表示-128:
(-1) + (-127) = [1000 0001]原 + [1111 1111]原 = [1111 1111]补 + [1000 0001]补 = [1000 0000]补
-1-127的结果应该是-128, 在用补码运算的结果中, [1000 0000]补 就是-128. 但是注意因为实际上是使用以前的-0的补码来表示-128, 所以-128并没有原码和反码表示.(对-128的补码表示[1000 0000]补算出来的原码是[0000 0000]原, 这是不正确的)
使用补码, 不仅仅修复了0的符号以及存在两个编码的问题, 而且还能够多表示一个最低数. 这就是为什么8位二进制, 使用原码或反码表示的范围为[-127, +127], 而使用补码表示的范围为[-128, 127].
因为机器使用补码, 所以对于编程中常用到的32位int类型, 可以表示范围是: [-231, 231-1] 因为第一位表示的是符号位.而使用补码表示时又可以多保存一个最小值
参考
http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html
分享到:
相关推荐
而负数的原码、反码和补码则不同,它们之间存在特定的转换关系。 5. 在8位机器码中,如果一个数的补码为10110100,它表示的十进制真值为-76。这是因为对于负数,将补码转换为十进制需要先取反(除符号位外),然后...
原码反码补码讲课 计算机中的数值表示是计算机基础知识的重要组成部分。在计算机中,数值可以分为整数和实数两大类。整数又可以分为无符号整数和带符号整数。无符号整数是指不带符号的整数,而带符号整数则是带有...
在计算机科学中,原码、反码和补码是用于表示二进制数值,特别是负数的三种方式。本文将详细讲解这三种编码方式,并通过C#编程语言演示如何进行三码之间的转换。 1. 原码(Direct Code): 原码是最直观的二进制...
在计算机科学中,二进制表示的数字有三种主要形式:原码、反码和补码,主要用于表示有符号整数。本项目是基于C++的MFC(Microsoft Foundation Classes)框架实现的一个实用工具,旨在帮助用户理解并进行原码、反码和...
原码反码补码是计算机系统中最基本的概念之一,了解原码反码补码的原理和应用对于计算机科学和技术的学习非常重要。本资源摘要信息将对原码反码补码的概念、特点和应用进行详细的介绍。 一、机器数与真值 机器数是...
### 整数的原码、反码和补码详解 在计算机科学中,原码、反码和补码是表示有符号整数的三种主要方式。它们被广泛应用于数据存储和算术运算中,每种编码方式都有其特定的规则和应用场景。 #### 一、原码(Sign and ...
"原码反码补码说课.pptx" 本资源是关于计算机组成原理的教学课件,主要讲解了原码、反码和补码的概念、计算方法和表示范围。该课件旨在培养学生实事求是的学风、耐心细致的工作作风和严谨的工作态度。 一、知识...
- **负数**的原码、反码和补码不同,其中补码是通过对原码取反后加1得到的。 - 补码的主要优点在于简化了计算机内部的运算逻辑,使得减法可以转化为加法运算。 了解这些概念对于理解计算机内部的数值表示和运算机制...
16进制(4位)到二进制原码、反码、补码计算
原码、反码、补码、移码与浮点数 原码、反码、补码、移码是计算机科学中用于...本文对原码、反码、补码、移码的定义和浮点数的表示方式进行了详细的介绍,并对补码加、减运算规则和原码一位乘、除的实现进行了讨论。
在深入探讨计算机中表示有符号整数的原码、反码和补码之前,让我们先回顾一下计算机存储数据的基本单位——字节。正如文中所述,一个字节由8位组成,每位可以是0或1,因此一个字节可以表示\(2^8 = 256\)种不同的状态...
负数的补码就是对反码加一,而正数不变,正数的原码反码补码是一样的。在补码中用(-128)代替了(-0),所以补码的表示范围为:(-128~0~127),共 256 个。注意:(-128) 没有相对应的原码和反码,(-128) = ...
原码、反码和补码是计算机中用来表示有符号整数的重要概念,它们主要用于二进制数的存储和计算,特别是在计算机硬件中简化运算过程。以下是对这些概念的详细解释: 1. **原码**: 原码是最直观的表示方式,直接在...
/* *功能实现任意二进制数的原码 反码 补码转换 *仅仅是字符串的操作,没有进行数字操作 *对-0的操作可能有问题 *ssfshine@gmail.com */
本文主要探讨了机器数、真值以及原码、反码和补码这三种在计算机中表示有符号整数的关键概念。 首先,机器数是计算机中用于表示数值的二进制形式,包括符号位。在有符号数中,最高位通常作为符号位,0代表正数,1...
学习原码、反码和补码之前,需要先了解机器数和真值的概念 在学习原码、反码和补码之前,需要先了解机器数和真值的概念。这是因为机器数和真值是计算机中表示数值的基础。 机器数是指一个数在计算机中的二进制表示...
原码反码补码图解.原码反码补码图解.原码反码补码图解.
计算机原码、反码和补码是计算机中对数字的表达方式。机器数是计算机中数字的表现形式,分为正负两类,通过最高位(符号位)来表明其正负,其中0表示正数,1表示负数。 原码是计算机中最原始的数字表达方式,第一个...
计算机中的数字表示是一个关键概念,尤其在理解计算机底层工作原理时。...同时,通过原码、反码和补码之间的转换,可以方便地进行数值的表示和计算。掌握这些基本概念对于理解和编程计算机系统至关重要。
在高级编程语言中,虽然程序员通常不直接接触到原码、反码和补码,但这些概念是理解计算机内部数据表示和运算机制的基础。 #### 七、总结 原码、反码和补码是计算机科学中用于表示和处理数值的重要概念。它们的...