二进制

作者: 想象不到2019 | 来源:发表于2020-04-25 12:46 被阅读0次

    十进制 数字123
    每一位的数字是0-9,10个数字中的一个
    123 = 1x100 + 2x10 + 3x1
    位权: 100 10 1

    二进制 1010
    每个位置只能是0和1,两个数字
    位权: 8 4 2 1

    补码:负整数的二进制表示
    -1
    1的原码: 00000001
    取反: 11111110
    +1: 11111111(补码)

    对-1的补码进行补码运算,得到对应正数1的原码
    -1的补码: 11111111
    取反: 00000000
    +1:00000001

    为什么需要补码?
    因为计算机只能做加法.
    1-1对应的是 1+(-1)
    00000001
    11111111
    00000000 结果等于0,最高位进1操作,超出位数限制,被丢弃

    十六进制

    int a = 0x7b;
    

    Java 7之后二进制常量

    int a = 0b11001;
    // 打印二进制字符串
    System.out.println(Integer.toBinaryString(a));
    // 打印十六进制字符串
    System.out.println(Integer.toHexString(a));
    

    位运算
    左移: <<, 右边补0, 左移1位相当于乘以2
    无符号右移: >> 左边补0
    有符号右移:左边最高位是1就补1,是0就补0
    右移1位相当于除以2

    小数为什么不能被二进制精确表示?
    10进制 1.2 = 1x1 + 2x0.1
    1/3 结果10进制也是不能精确表示的
    理解二进制小数的位权
    2^(-1) 0.5
    2^(-2) 0.25
    2^(-3) 0.125

    小数转化为整数进行运算,运算结束后再转化为小数
    BigDecimal 运算更精确,但效率比较低

    // 查看浮点数的具体二进制形式
    Integer.toBinaryString(Float.floatToIntBits(value));
    

    相关文章

      网友评论

        本文标题:二进制

        本文链接:https://www.haomeiwen.com/subject/tgwhwhtx.html