zoukankan      html  css  js  c++  java
  • Java中正负数的存储方式-正码 反码和补码

    Java中正负数的存储方式-正码 反码和补码

    正码

    我们以int 为例,一个int占用4个byte,32bits

    0 存在内存上为
    00000000 00000000 00000000 00000000

    11 存在内存上为
    00000000 00000000 00000000 00001011

    反码

    逐位取反,就得到一个对应的反码

    以11为例

    正码: 00000000 00000000 00000000 00001011

    反码: 11111111 11111111 11111111 11110100

    补码

    在补码的基础上再加1,就可以得到补码。

    同样以11为例

    正码: 00000000 00000000 00000000 00001011

    反码: 11111111 11111111 11111111 11110100

    补码: 11111111 11111111 11111111 11110101

    此时候就可得到-11在内存上的表示方式(11111111 11111111 11111111 11110101)

    如果要知道某个二进制的负数实际上是多少(最高位为1)

    以0xFFFFFFFF为例子

    补码: 11111111 11111111 11111111 11111111

    反码: 11111111 11111111 11111111 11111110

    正码: 00000000 00000000 00000000 00000001

    正码为1,所以0xFFFFFFFF (11111111 11111111 11111111 11111111)表示-1.

    这么做的原因

    这是因为底层硬件对数据做运算的时候,只有加数器可用,也就是只能直接把数据拿来相加,通过将负数用这种方式来表达,就可以直接通过对二进制码相加实现对数据的加减运算。

    以 -11+5 为例子

    -11: 11111111 11111111 11111111 11110101

    +5 : 00000000 00000000 00000000 00000101

    -6 : 11111111 11111111 11111111 11111010

    反码: 11111111 11111111 11111111 11111001

    正码: 00000000 00000000 00000000 00000110

  • 相关阅读:
    《使用Hibernate开发租房系统》内部测试笔试题
    C++第十课 字符串
    【011】字符数组
    C++第九课 数组
    C++第八课 局部变量和全局变量
    【010】递归函数
    C++第七课 函数2
    【009】阅读代码
    C++第六课 函数1
    【008】查找素数
  • 原文地址:https://www.cnblogs.com/Pikzas/p/12167569.html
Copyright © 2011-2022 走看看