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

  • 相关阅读:
    XAF 如何在工具栏显示多参数
    XAF Study Recources
    常用工具
    Linux下Kill函数用法
    ipv6相关转换
    宣布回归
    微软夏令营
    APEX SDK阅后感
    寻求offer,开始记录我的征程
    衣服模拟结果
  • 原文地址:https://www.cnblogs.com/Pikzas/p/12167569.html
Copyright © 2011-2022 走看看