首页 > 其他分享 >关于原码、反码、补码以及为什么存在原码、反码、补码

关于原码、反码、补码以及为什么存在原码、反码、补码

时间:2024-10-12 18:53:29浏览次数:9  
标签:反码 补码 负数 127 正数 原码

定义

原码

数字的二进制表示。在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其余二进制位表示数值的大小。例如:10的一个比特位原码是00001010。

反码

在原码的基础上符号位不变,其余位分别取反(0变成1,1变成0)。

补码

在反码的基础上加一。

提醒

正数的原,反,补码都一样。最后储存在内存的就是所有数据的补码!!!

为什么存在(以下都以一个byte位来演视)

为什么存在反码

反码的运算时,符号位也参与运算。

一个比特位一打眼看过去所能表示的数值的范围是01111111(127)到11111111(-127)但是实际上可以表示的范围是127到-128。

对于正数的加减法来说有

图中的的1+2每一位对应相加得到00000011转换为十进制就是3。但是如果对于负数加负数的话就有问题了。

图中-2加-1正确答案应该是-3但是利用每个二进制位对应相加所得到的结果却是00000011(三的二进制位)

所以原码对于负数的加减就有问题了。

原本等于-3的结果却等于了3,经过多组数据来看所有的结果都相反,原本应该等于-5的结果却等于了5。

这样每个数都相反,所以以前的程序员就想着把二进制位也取反符号位不动看能不能解决问题。所以这样就产生了反码!

反码的产生是为了解决负数计算的问题。

下图就是利用反码来计算有关于负数的计算-2加1

1是正数所以反码和原码一样。

为什么存在补码

首先声明补码的引入是为了解决负数运算产生了跨0的情况。在反码的运算时符号位也参与运算。

先看示例

对于图中如果一个负数和一个整数相加跨过了0,就会有错误,图中的正确答案应该是2但是却得到了1的反码(因为1是正数,所以原码,反码,补码都一样)这是为什么呢?

原因就是在反码系统中11111111和00000000都表示0一个表示-0的反码一个表示+0的反码。

从-0到+0的过程还需要多加一所以得到的结果会比预期的少一。

为了解决跨0的运算问题就引入了反码的概念。因为正数的原码,反码,补码都一样只有负数的补码需要在反码的基础上加一,所以就可以避开0有两种表达形式,让0只有00000000这一种表达形式。

这样-127的补码就从10000000变成了10000001,因为0的补码是00000000而1-127的补码是1000001这中间少了一个数10000000所以规定10000000就是-128(注意这个是规定即系统遇到100000000就认为它是-128不会有什么别的运算转换,-128没有原码和反码)。

所以一个比特位的取值范围就从127变成了-128了。

因为补码是一点一点从原码到反码最后到补码的所以它具有原码的解决正数运算的能力、和反码解决负数不跨0的计算能力、和补码本身解决跨0的情况。所以最后在内存中存储的就是补码了!!!

标签:反码,补码,负数,127,正数,原码
From: https://blog.csdn.net/hello_liuzp/article/details/142874992

相关文章

  • Java - 5 原码、反码、补码
    Java-5原码、反码、补码0表示正,1表示负整数的原码,反码,补码都一样负数的反码=原码符号位不变,其它位取反负数的补码=反码+10的反码,补码都是0Java中没有无符号数计算机运算时,以补码的方式运算看计算结果时,要看原码整数数据类型取值范围数据类型范围byt......
  • JavaSE——进制转换、原码、反码、补码、位运算(左移、右移、取反)
    目录一、四种进制介绍二、进制的转换 (一)二进制—>十进制(二)八进制—>十进制(三)十六进制—>十进制(四)十进制—>二进制(五)十进制—>八进制(六)十进制—>十六进制(七)二进制—>八进制(八)二进制—>十六进制(九)八进制—>二进制(十)十六进制—>二进制三、原码......
  • 原码、反码和补码的概念
    错题考的知识点是计算机中数值的表示方式,特别是原码、反码和补码的概念。原码原码是计算机中表示整数的一种方式,它是直接将数字转换为二进制数,其中最高位作为符号位,0表示正数,1表示负数,其余位表示数值。例如,对于8位二进制数:正数的原码:第一位是0,后面跟数字的二进制表示。负数的......
  • Java的原码、反码和补码
    在Java中,原码、反码和补码是用来表示整数的三种不同的编码方式。这三种编码方式分别用来表示正数、负数以及0。原码:原码是整数的最基本的表示方式,它直接将整数的二进制表示出来。原码的表示方法是,最高位表示符号位(0表示正数,1表示负数),其余位表示整数的绝对值的二进制表示。......
  • Note: 原反补码表示: 合法表示范围, 如补码的最大值2^n-1为什么会有个-1?
    背景:学习关于n+1bit带符号整数的合法表示范围(如下图)笔记缘由:产生了疑惑,不能自解-机器数=无符号数(不包含符号位,所有位都用于表示数值的大小,表示范围非负)+有符号数(原、反、补、移码)-原码:用数值部分表示真值的绝对值,符号位"0/1"对应"正/负"-......
  • 动手动脑——原码,反码,补码
    在计算机科学中,原码、反码和补码是数字在计算机内部表示的一种方式,主要用于二进制数的运算,特别是负数的表示和运算。原码:原码是最直接的二进制表示方法,其中最高位是符号位,0表示正数,1表示负数。剩下的位表示数值的大小。例如,十进制数5的原码表示为:00000101(假设使用5位二进制数......
  • 原码 补码 反码
    #include<iostream>usingnamespacestd;intmain(){inta;cin>>a;intzi[a];for(inti=0;i<a;i++){cin>>zi[i];}if(zi[0]==0){for(inti=0;i<a;i++){cout<<zi[i];......
  • 9月26日原码,补码,反码知识点
    首先是这三码的区别,对于正数来讲三者没有什么区别,区别在于负数反码:原码中除去符号位,其他的数值位按位取反,即0变1,1变0补码:反码+1示例显而易见的对于正数没有区别。那么设计这三个码的意义是什么?上面介绍了原码、反码和补码三者的概念,那么,计算机中为什么要设计补码这一概念呢?因......
  • 成都仪器定制-二进制补码及与原码的互相转换方法
    大沙把一些基础的知识说清楚,本文介绍二进制补码及与原码的转换方法。先说原码,原码‌是一种计算机中对数字的二进制定点表示方法。在原码表示法中,数值前面增加了一位符号位,最高位为符号位,0表示正数,1表示负数。其余位表示数值的大小。二进制补码‌是一种用于表示有符号整数的二进......
  • 整数在内存中的存储&&原码反码补码
    目录1.整数在内存中以二进制的形式存在1.1(正数存储情况)1.2负数存储情况1.3整数的补码如何得到原码2.无符号整数的原反补码 小心!VS2022不可直接接触,否则!没这个必要,方源面色淡然一把抓住!顷刻炼化! 1.整数在内存中以二进制的形式存在1.1(正数存储情况)比如说数字2......