美文网首页
对原码,反码,补码的理解

对原码,反码,补码的理解

作者: 一场小龙卷风 | 来源:发表于2019-05-29 10:29 被阅读0次

    对原码,反码,补码的理解

    今日在对java的学习中,遇到进制转换的问题,发现有符号的数即负数的进制转换涉及到原码,反码,补码相关知识。所以经过查阅资料,琢磨,下面是我自己对原码,反码,补码的理解。

    计算机就是通过处理数据,才实现出这么多功能。在日常使用中,无论是点击按钮,打开图片,播放视频,亦或是其他操作,本质上都是对数据进行处理,因为,这些图片,视频等其储存在计算机中就是由0和1组成的二进制数据形式,只不过含有其特殊的编码,归本溯源都是二进制格式。现在就简单的以数字为例。

    人在日常生活中是使用十进制数的,在计算机中,将会把十进制转换成二进制数。是以补码的形式存储在计算机中。但在补码之前,还有原码,和反码。

    原码:

    是在最早期,以二进制表现数字的一种形式。

    正数:十进制转换成二进制【十进制数除以2,一直到商为0,取其余数,就为二进制数】
    负数:在计算机中,最小的存储单位是字节,一个字节是八位,所以规定最高位为正负的符号位,如果是正数,符号位为0,负数的符号位为1。所以,原码中负数的二进制数就是将此负数的绝对值的原码的最高位变为1。

    十进制 二进制
    42 0010 1010
    -42 1010 1010
    7 0000 0111
    -7 1000 0111

    但是这样的负数原码在计算时却出现问题,42+(-7)应该为35,使用此二进制数相加减,得到的结果为1011 0001,十进制是177.此时计算机中的计算是把-7的二进制数1000 0111当成正数135来进行计算的。所以原码中的负数并不符合要求,所以诞生了反码。

    反码:

    反码规定,最高位仍旧是符号位,正数的原码和反码相同,负数的反码是在此负数的原码基础上,除符号位,将其余各位取反。

    十进制 二进制
    42 0010 1010
    -42 1101 0101
    7 0000 0111
    -7 1111 1000

    但是反码也没有解决其计算问题,即42+(-7)=35,在二进制计算里,得到结果为0010 0010为34。42+(-42)=0的二进制也出现了问题,得到的结果不是0。所以出现了补码。

    补码:

    正数的补码和原码,反码一致。负数的补码就是在反码的基础上加1。

    十进制 二进制
    42 0010 1010
    -42 1101 0110
    7 0000 0111
    -7 1111 1001

    经过计算。42+(-7)=35,二进制计算结果为0010 0010 + 1 =0010 0011,十进制也为35。42+(-42)=0,二进制计算结果为0000 0000,十进制为0。这样补码就完美解决了正负数遇到的各种问题,所以计算机中存储数据都是以补码形式。

    相关文章

      网友评论

          本文标题:对原码,反码,补码的理解

          本文链接:https://www.haomeiwen.com/subject/lvdetctx.html