首页 > 其他分享 >原码反码和补码的区别及用法笔记

原码反码和补码的区别及用法笔记

时间:2022-12-01 01:11:46浏览次数:36  
标签:反码 补码 对应 1111 十进制 原码

之前学习原码、反码、补码的时候就学的很懵,知道反码和补码怎么算的,但是不知道有什么用。
今天看了几个视频,虽然有举例,但是自己换了个数就算不出来了。后来终于弄明白了。
在这里记录一下。也为没有计算机基础的同学提供一下参考。

我们生活中使用的都是十进制的,但是计算机用的是二进制的。
十进制的意思就是逢十进一,二进制的意思就是逢二进一,当然对应十六进制就是逢十六进一(所以十六进制对应的9后面不进位而是ABCDEF)。
由于二级制的话,每一位刚好又对应了2的n次方,所以在一些教程里,经常看到有人问8 4 2是怎么来的。

下面以二进制的 1111 举例说明

二级制(无符号) 第4位 第3位 第2位 第1位
对应计数(从0开始计数) 3 2 1 0
二进制值 1 1 1 1
对应2的次方表示 2^3 2^2 2^1 2^0
对应十进制表示 8 4 2 1

上面这个例子是原码无符号的情况。
如果有符号的情况,约定最高位就用来作为正负号,0代表正号,1代表负号。
这个时候 二进制1111在无符号数的时候,转换为十进制是15,作为为有符号数的时候对应十进制是-1

当开始讲原码、反码、补码的时候通常会举例。
例如:
对于十进制1对应的四位二进制,原码是 0001
如果是十进制-1,对应原码在最高位加个符号位,即 1001即可
此时对应的反码,符号位不变,其他位取反,即 1110
对应的补码就是反码+1,即 1111。
有的教程讲到这里,就讲完了。
讲到这里我觉得只说清楚了怎么算出来的补码,但是还没解释怎么用的。
然后我又去查了怎么用的,发现是在计算的时候。
这里说明一下,不能大于实际表示范围的计算,为了解释比较方便,使用4位的2进制数,所以实际对应十进制范围是-8~7。下面举例子的加减前和加减后的值都不能超过这个范围才行。

计算加法的时候是不用补码的,只有计算减法才用到。
由于计算机的逻辑电路的原因,实际上只能进行加法运算。
例如:十进制2-1,不能直接使用2-1,要使用2+(-1)
即:
0010
+1001
这里是原码,如果直接加的话,结果是1011为-3,结果显然是错的。
就需要使用补码。补码就是在原码基础上+1。(有的老师解释为是因为计算过程中有了进位,进到了第五位,但是第五位不存在,所以需要用+1来补足。但是有的老师说是因为我们在处理0000和1000的时候,将0000作为0,导致1000变成了-1产生了1位的偏移量,所以在计算时要补全。)
十进制 -1
原码 1001
反码 1110
补码 1111

这时候使用补码进行计算
0010
+1111
=0001
得出的结果是1,这个时候,是没有问题的。

但是在遇到2-3的收
-3
原码 1011
反码 1100
补码 1101
十进制 2-3
0010
+1101
=1111 这个时候,当出现了负值的时候就出现了疑惑。
刚刚 2-1 = 0001 = 1 但是2-3 = 1111 = -7 和结果显然不符。
这个时候可能会产生疑惑。
要注意,在计算的过程中,符号位是参与计算的。但是在计算完成后。
计算结果是补码。需要转换回原码,才能得到正确的数值。
由于整数的补码还是自己,所以2-1的结果,不需要还原,就是正确的值。
但是2-3的结果是负数,就需要还原成原码。

补码 1111 还原反码需要 -1 为 1110, 还原为原码需要保留符号位,反转其他位,变成 1001 即-1

我当时上学的时候这里就是没有搞明白,最近重拾C,又遇到这里,看了好多个教程,终于搞明白了,这里原来要还原回去。

标签:反码,补码,对应,1111,十进制,原码
From: https://www.cnblogs.com/yscheng/p/16940264.html

相关文章

  • 补码4×4阵列乘法器设计
    视频讲解:https://www.bilibili.com/video/BV1ye4y1H7Ao/一、简述乘法运算在全部算数运算中大约占据三分之一,因此采用高速乘法部件,无论从速度上还是效率上,都十分必要。本......
  • PC_机器数_定点负数的原码_补码_反码在结构上的关系
    文章目录​​预备知识​​​​模2范畴内的取反​​​​证明二进制补码规律​​​​模k同余​​​​......
  • 原码、补码、反码的表示及计算
    今天简单总结了一下计算机的原码、补码、反码的表示,谨以此文缅怀教过我数字逻辑电路课程以及计算机组成原理课程的老师。一个数在计算机中的二进制表示形式我们称之为机器......
  • C - 原码、反码和补码
    原码计算机使用二进制编码存储数字.用第一个bit位表示符号,1表示负号,0表示正号.4个bit能够表示的数字:最小:1111→-7最大:0111→7但是原码不能进行加减......
  • golang获取补码,原码
    packagemainimport("encoding/binary""fmt""strconv")funcmain(){vara=[]byte{0x15,0x4B}varb=[]byte{0xE0,0x15}//fmt.Println(fmt.......
  • 源码补码与反码
    title:源码补码与反码comments:truedate:2022-11-2113:24:55tags:javacategory:计算机底层存储数据时使用的是二进制数字,但是计算机在存储一个数字时并不是直......
  • 原码,反码,补码
    源码源码就是该数的二进制数反码整数的反码是其本身,负整数的反码是0变1,1变0;补码整数的补码就是本身,负整数的补码是反码+1;......
  • object类(查看JDK原码,子类重写equals,hascode,toString,finalize)--JAVA
    一、equals==      publicclassequals{//把光标放在equals方法,直接输入ctrl+b--查看jdk源码publicstaticvoidmain(String[]args){Pers......
  • java 为什么要用补码_Java为什么使用补码进行计算的原因分析
    转自csdn---主要是前面的解释很通俗易懂,后面的没有细看,转过来以后查看方便。我们主要要解决的问题就是负数的表示,而众所周知,绝对值相等的两个正负数之和为0。假设我们有......
  • cs03_补码
    浅聊补码今天查资料遇到了补码的概念,可惜已经把专业课老师传授的知识忘得七七八八了,就上网查了下补码的资料,讲解五花八门,读了半天总感觉还是没有关联上自己的知识结构......