zoukankan      html  css  js  c++  java
  • Java基础-原码反码补码

                        Java基础-原码反码补码

                                      作者:尹正杰

    版权声明:原创作品,谢绝转载!否则将追究法律责任。

      注意,我们这里举列的原码和反码只是为了求负数的补码,在计算机中没有原码,反码的存在,只有补码。

    一.原码

    1>.正数的原码就是它的本身

      假设使用一个字节存储整数,整数10的原码是:0000 1010

    2>.负数用最高位是1表示负数

      假设使用一个字节存储整数,整数-10的原码是:1000 1010

    二.反码

    1>.正数的反码跟原码一样

      假设使用一个字节存储整数,整数10的反码是:0000 1010

    2>.负数的反码是负数的原码按位取反(0变1,1变0),符号位不变

      假设使用一个字节存储整数,整数-10的反码是:1111 0101

    三.补码(再次强调,整数的补码才是在计算机中的存储形式。)

    1>.正数的补码和原码一样

      假设使用一个字节存储整数,整数10的补码是:0000 1010(第三次强调:这一串是10这个整数在计算机中存储形式)

    2>.负数的补码是负数的反码加1

      假设使用一个字节存储整数,整数-10的补码是:1111 0110(第三次强调:这一串是-10这个整数在计算机中存储形式)

    四.在计算机中,为什么不用原码和反码,而是用补码呢?

      因为在使用原码,反码在计算时不准确,使用补码计算时才准确。

    1>.使用原码计算10-10

             0000 1010  (10的原码)

        +        1000 1010   (-10的原码)

    ------------------------------------------------------------

             1001 0100  (结果为:-20,很显然按照原码计算答案是否定的。)

    2>.使用反码计算10-10

          0000 1010  (10的反码)

        +   1111 0101  (-10的反码)

    ------------------------------------------------------------

          1111 1111  (计算的结果为反码,我们转换为原码的结果为:1000 0000,最终的结果为:-0,很显然按照反码计算答案也是否定的。)

    3>.使用补码计算10-10

          0000 1010  (10的补码)

       +   1111  0110  (-10的补码)

    ------------------------------------------------------------

          1 0000 0000  (由于我们这里使用了的1个字节存储,因此只能存储8位,最高位(第九位)那个1没有地方存,就被丢弃了。因此,结果为:0)

    五.小试牛刀

      有了上面的案例,接下来,我们来做几个小练习吧,分别计算以下反码表示的十进制数字是多少呢?

    1>.0b0000 1111

      相信这个数字大家异口同声的就能说出它的答案是:15(因为正数的补码和原码一样)

    2>.0b1111 1111

      计算过程:0b1111 1111(补码)------>0b1111 1110(反码)------>0b1000 0001(原码)

      将其换算成原码之后就可以得到最后的结果为:-1

    3>.0b1111 0000

      计算过程:0b1111 0000(补码)------>0b1110 1111(反码)------>0b10010000(原码)

      将其换算成原码之后就可以得到最后的结果为:-16

    4>.0b1000 0001

      计算过程:0b1000 0001(补码)------>0b1000 0000(反码)------->0b1111 1111(原码)

      将其换算成原码之后就可以得到最后的结果为:-127

  • 相关阅读:
    如何在.netcore 上实现 Rbac 权限管理
    socket编程之TCP开发中的PEEK_MSG的使用与见解
    简述单例模式的一些优缺点及其评价
    排查线上内存泄漏,RingBufferLogEvent类内存占用过高,skyWalking内存占用过高
    Centos7安装docker(报错:container-selinux >= 2:2.74)
    JSP3.4
    Java SM2加密、解密、签名、验签
    获取properties文件中的
    五种生成唯一id方式的对比
    SpringBoot 改造成 https访问
  • 原文地址:https://www.cnblogs.com/yinzhengjie/p/8666354.html
Copyright © 2011-2022 走看看