首页 > 其他分享 >原码,反码以及补码

原码,反码以及补码

时间:2024-11-20 14:15:02浏览次数:3  
标签:反码 符号 二进制 补码 十进制 原码

 二进制如何转换为原码、反码和补码:详解

在计算机科学中,‘码’、‘反码‘和‘补码’是用来表示整数的几种常见方法。它们的区别主要在于处理负数的方式。今天我们将从零开始,讲解二进制是如何转换为原码、反码和补码的,适合新手理解。

 一、前置知识

 1.1 二进制简介
二进制是一种仅用 0*和 1表示数字的系统,广泛应用于计算机中。  
例如:  
- 十进制的数字 `5`,在二进制中表示为 `101`。  
- 十进制的数字 `-5` 的二进制表示需要结合原码、反码或补码规则。

1.2 符号位
在计算机中,用一个额外的比特位(称为符号位)来表示正负号:
- 符号位为 ‘0‘ 表示正数。
- 符号位为 ’1‘ 表示负数。

例如,在 8 位(1 个符号位 + 7 个数值位)中:
- 正数 5 的二进制表示为 `00000101`。
- 负数 -5 则要用不同的编码规则表示,如原码、反码或补码。

二、原码、反码和补码详解

 2.1 原码
原码(Sign-Magnitude Representation) 是最简单的表示方法,由 符号位 + 绝对值的二进制表示 构成。

转换规则:
1. 正数:直接用符号位 0 加上数值的二进制表示。
2. 负数:符号位为 1,后面跟数值的二进制表示。

 示例:
以 8 位为例(1 个符号位 + 7 个数值位):  
- 十进制 `+5`:
  - 二进制表示:`00000101`(符号位为 0,后面是 5 的二进制 `101`)。
- 十进制 `-5`:
  - 二进制表示:`10000101`(符号位为 1,后面是 5 的二进制 `101`)。

  特点:
- 易于理解,但运算复杂。正数和负数的计算需要额外处理符号位。

 2.2 反码
反码(Ones' Complement Representation) 通过对原码进行变换来表示负数。

 转换规则:
1. 正数:与原码相同。
2. 负数:将原码的符号位保留,数值位按位取反(0 变 1,1 变 0)。

 示例:
以 8 位为例:
- 十进制 `+5`:
  - 原码:`00000101`。
  - 反码:`00000101`(正数的反码与原码相同)。
- 十进制 `-5`:
  - 原码:`10000101`。
  - 反码:`11111010`(将数值位 `0000101` 按位取反)。

  特点:
- 解决了原码的部分问题,但仍然存在零的两种表示(+0 和 -0)。
  - `+0` 的反码:`00000000`。
  - `-0` 的反码:`11111111`。

 2.3 补码
补码(Two's Complement Representation) 是目前计算机中最常用的表示方法。

  转换规则:
1. 正数:与原码相同。
2. 负数:
   1. 将该数的原码按位取反。
   2. 在反码的基础上加 1。

 示例:
以 8 位为例:
- 十进制 `+5`:
  - 原码:`00000101`。
  - 补码:`00000101`(正数的补码与原码相同)。
- 十进制 `-5`:
  1. 原码:`10000101`。
  2. 反码:`11111010`(数值位取反)。
  3. 补码:`11111011`(反码加 1)。

 特点:
- 统一了零的表示(只有一个零,`00000000`)。
- 补码运算简单,适合计算机处理。

 三、对比总结

表示方法

正数规则负数规则优点缺点
原码符号位为 0 + 数值符号位为 1 + 数值易于理解存在两个零,运算复杂
反码与原码相同符号位不变,数值位按位取反

运算较原码简单

存在两个零
补码与原码相同反码 + 1零的唯一表示,运算方便表示不直观(符号和数值混合)

四、动手试试:从十进制到补码的转换

让我们一起将十进制 `-10` 转换为 8 位二进制补码表示:

1. 写出原码:  
   十进制 `10` 的二进制是 `00001010`,加上符号位 1,原码是 `10001010`。

2. 求反码:  
   原码的符号位不变,数值位取反,得到反码:`11110101`。

3. 加 1 求补码:  
   在反码 `11110101` 上加 1,得到补码:`11110110`。

因此,十进制 `-10` 的补码是 `11110110`。

五、为什么补码最常用?

- 加减法运算简单:在补码中,加法和减法可以使用相同的电路实现。
- 零的唯一性:补码解决了零的重复表示问题。
- 无需特殊处理符号位:补码的符号位自然融入数值运算。

 六、总结 

理解原码、反码和补码是学习计算机底层原理的关键。这三种表示方法各有优缺点,但补码因其计算效率高而成为计算机硬件的标准。通过掌握这些知识,你可以更深入地理解计算机是如何存储和处理整数的! 

希望这篇文章能帮助你轻松入门二进制编码!如果有疑问,欢迎在评论区提问

标签:反码,符号,二进制,补码,十进制,原码
From: https://blog.csdn.net/B5201234/article/details/143910070

相关文章

  • 字节青训-小C的类二进制拼图、小M的奶酪问题、小T的密码变换规则、数值操作的期望计算
    目录一、小C的类二进制拼图问题描述测试样例解题思路:问题理解数据结构选择算法步骤第一版代码:最终代码:  二、小M的奶酪问题问题描述测试样例解题思路:问题理解数据结构选择算法步骤 最终代码:运行结果: 三、小T的密码变换规则问题描述测试样例 解题......
  • 【入门】字符串的反码c++
    #include<bits/stdc++.h>usingnamespacestd;intmain(){ //一、分析问题 //已知:一个长度不超过80个字符的字符串。 //未知:字符串的反码。 //关系:如果这是一个小写字符,则它和字符a的距离与它的反码和字符z的距离相同;如果是一个大写字符,则它和字符A的距离与它......
  • 二进制补码及与原码的互相转换方法详解
    在数字计算机系统中,数据的表示和处理是至关重要的一环。二进制作为计算机内部的基本编码方式,其表示形式直接决定了计算机处理数据的效率和准确性。在二进制表示中,原码和补码是两种重要的编码方式,尤其在处理有符号整数时显得尤为重要。本文将深入探讨二进制补码的概念、作用以及其......
  • 对补码的理解
    计算机的本质就是计算,只不过和人不一样的是:我们是用十进制数计算,而计算机是用二进制数计算。基本的运算规则就是四则运算:加减乘除。那么如何用二进制数进行四则运算呢?和用十进制数运算的方法一样吗?第一个层面,我们要理解一个十进制数如何化成二进制数。比如十进制数16用二......
  • C语言原码、反码和补码的详解
    C语言原码、反码和补码的详解放在最前面的1、前言正数的原码、反码和补码负数的原码、反码和补码2、整数的原码(2.1)原码的定义(2.2)计算原码3、整数的反码(3.1)反码的定义(3.2)计算反码4、整数的补码(4.1)补码的定义(4.2)计算补码(a)正数的补码(b)负数补码5、原码、反码和补......
  • 3.Java 运算符(算术运算符、赋值运算符、逻辑运算符、关系运算符、三元运算符、标识符
    一、算术运算符1、基本介绍运算符说明+正号-负号运算符说明+加-减*乘/除%取模(取余)运算符说明示例结果++自增(前),先运算后取值a=2;b=++a;a=3;b=3;++自增(后),先取值后运算a=2;b=a++;a=3;b=2;–自减(前),先运算后取值a=2;b=--a;a=1;b=1;–自减(后),先......
  • 【软件考试】一文学会原码,反码与补码
    文章目录三码互转十进制数转二进制三码互转在计算机中,数值通常以二进制形式表示,原码、反码和补码是三种不同的表示方法。一、原码概念:原码是最直观的二进制表示法,最高位为符号位,0表示正数,1表示负数,其余位表示数值的绝对值。例如,对于8位二进制数,+5的原码是......
  • 关于原码、反码、补码以及为什么存在原码、反码、补码
    定义原码数字的二进制表示。在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其余二进制位表示数值的大小。例如:10的一个比特位原码是00001010。反码在原码的基础上符号位不变,其余位分别取反(0变成1,1变成0)。补码在反码的基础上加一。......
  • Java - 5 原码、反码、补码
    Java-5原码、反码、补码0表示正,1表示负整数的原码,反码,补码都一样负数的反码=原码符号位不变,其它位取反负数的补码=反码+10的反码,补码都是0Java中没有无符号数计算机运算时,以补码的方式运算看计算结果时,要看原码整数数据类型取值范围数据类型范围byt......
  • JavaSE——进制转换、原码、反码、补码、位运算(左移、右移、取反)
    目录一、四种进制介绍二、进制的转换 (一)二进制—>十进制(二)八进制—>十进制(三)十六进制—>十进制(四)十进制—>二进制(五)十进制—>八进制(六)十进制—>十六进制(七)二进制—>八进制(八)二进制—>十六进制(九)八进制—>二进制(十)十六进制—>二进制三、原码......