zoukankan      html  css  js  c++  java
  • 负数的二进制表示

    在二进制中,用最高位来表示整数和负数。

    比如 

            System.out.println(Integer.toBinaryString(1));
            System.out.println(Integer.toBinaryString(-1));            

    会输出

    整数前面的0被省略了。

    或者这样

    public void test(){
            System.out.println(Integer.toBinaryString(Integer.MAX_VALUE));
            System.out.println(Integer.toBinaryString(-1));
        }

    输出

    显而易见,最大值前面省略了一个0。

    应该是

    01111111111111111111111111111111

    这也解释了我一直以来的困惑。

    所以,最高位如果是0则表示正数,如果为1则表示为负数。

    在计算机中,负数以其正值的补码形式表达

    比如

            System.out.println(Integer.toBinaryString(33));
            System.out.println(Integer.toBinaryString(-33));

    输出

    我们取后八位,好显示

    00100001(33)

    11011111(-33)

    正数变为负数的过程为1.取反,2.加1

    ①取反

    00100001 取反为

    11011110

    ②加1

    11011110加1后为

    11011111

    所以-33的二进制表示为

    11011111

    表达的什么玩意啊。。。

    参见:http://www.cnblogs.com/junsky/archive/2009/08/06/1540727.html

  • 相关阅读:
    数据库表关联分析
    java异常信息分析
    版本问题
    项目
    EXCEL工具
    项目安全
    服务器环境
    vue公共
    Linux 文件权限
    nginx
  • 原文地址:https://www.cnblogs.com/Iqiaoxun/p/5575542.html
Copyright © 2011-2022 走看看