Java 学习:原码、反码、补码

原码、反码、补码

计算机只知道 0 和 1,所以在运算的时候是以二进制方式计算的:
  1. 二进制的最高位是符号位:0表示正数,1表示负数

  2. 正数的原码、反码、补码都一样(三码合一)

  3. 负数的反码等于它的原码符号位不变,其他位取反(0->1、1->0)

  4. 负数的补码等于它的反码加1,负数的反码 = 负数的补码 - 1

  5. 0的反码、补码都是0

  6. java没有无符号数,换言之,java中的数都是有符号的

  7. 在计算机运算的时候,都是以补码的方式来运算的

  8. 当我们看运算结果的时候,要看它的原码



什么是补码【一听就懂】什么是补码


示例1:3 + (-3) 的运算

         
        //3的原、反、补码【正数的原码、反码、补码都一样(三码合一)】
        //00000000 00000000 00000000 00000011

        //-3的原码
        //10000000 00000000 00000000 00000011

        //-3的反码
        //11111111 11111111 11111111 11111100

        //-3的补码
        //11111111 11111111 11111111 11111101

        //3 + (-3) 进行加法运算
        //00000000 00000000 00000000 00000011
        //11111111 11111111 11111111 11111101

        //00000000 00000000 00000000 00000000 => 看最高位,运算结果为正数
        //又因为正数的 原码、反码、补码都一样,所以结果为 0
        //以上运算结果为 0 即:3 + (-3) = 0


示例1:9 + (-33) 的运算


        //9的原、反、补码【正数的原码、反码、补码都一样(三码合一)】
        //00000000 00000000 00000000 00001001

        //-33的原码
        //10000000 00000000 00000000 00100001

        //-33的反码
        //11111111 11111111 11111111 11011110

        //-33的补码
        //11111111 11111111 11111111 11011111

        //9 + (-33) 进行加法运算
        //00000000 00000000 00000000 00001001
        //11111111 11111111 11111111 11011111

        //11111111 11111111 11111111 11101000 => 最高位为1,运算结果为负数,显示结果要转成原码
        //11111111 11111111 11111111 11100111 => 用补码 -1 先得到反码
        //10000000 00000000 00000000 00011000 => 再用反码得到原码,结果为 -24
        //结果为 -24,即 9 + (-33) = -24


posted @ 2021-09-15 17:44  typeof(光)  阅读(244)  评论(0编辑  收藏  举报