HashMap

Map源码阅读预热 01——java中的运算符

2020-12-02  本文已影响0人  从零开始的程序猿生活

jdk版本:1.8

准备工作

十进制转二进制:
    public static void main(String[] args) {
        /* 十进制转二进制 */
        System.out.println(toBinary(10));
    }

    private static String toBinary(int num) {
        StringBuilder sb = new StringBuilder();
        while (num != 0){
            sb.append(num % 2);
            num = num / 2;
        }
        return sb.reverse().toString();
    }

// 打印结果
1010
二进制转十进制:

代码实现:

System.out.println(Integer.parseInt("1010",2));
// 打印结果
10
位异或运算(^)

运算规则:两个数转换为二进制,从高位比较,如果相同为0,不同为1。
例如:10 ^ 2 ===> 1010 ^ 0010 ===> 1000 = 8

代码实现:

 System.out.println(10^2);
// 打印结果
8
位与运算符(&)

运算规则:两个数转换为二进制,从高位比较,如果两个数都是1 为 1,否则为0。
例如:10 & 2 ===> 1010 & 0010 ===> 0010 = 2

代码实现:

System.out.println(10 & 2);
// 打印结果
2
位或运算符(|)

运算规则:两个数转换为二进制,从高位比较,如果两个数有一个1 则为 1,否则为0。
例如:10 | 2 ===> 1010 | 0010 ===> 1010 = 10

代码实现:

System.out.println(10 | 2);
// 打印结果
10
位非运算符(~)

运算规则:如果位为0 则 为 1,如果位为 1 则为 0。
例如:10 ===> 0000 1010
~10 ===> 1111 0101
因为10取反的补码是负数,所以求原码需要:将补码忽略符号位取反码 + 1
即:1000 1010 + 1 ===> 1000 1011 = -11

代码实现:

System.out.println(~10);
// 打印结果
-11
java中的 << >> >>>运算符

代码实现:

        /* 正数的原码与补码相同 */
        System.out.println(2 << 1);
        // 补码:0000 0010 左移一位,低位补0 0000 0100 原码:0000 0100 ===> 4
        System.out.println(-2 << 1);
        // 原码:1000 0010 反码:1111 1101 补码:1111 1110 左移一位,低位补0  1111 1100
        // 再将补码求原码,即: 反码:1000 0011 反码+1为补码(也是当前数原码):1000 0100 ===> -4
        System.out.println(2 >> 1);
        // 补码:0000 0010 右移一位,高位补0 0000 0001  原码:0000 00001 ===> 1
        System.out.println(-2 >> 1);
        // 原码:1000 0010  反码:1111 1101 补码:1111 1110 右移一位,高位补1 1111 1111
        // 再将补码求原码,即: 反码:1000 0000 反码+1为补码(也是当前数原码):1000 0001 ===> -1
        System.out.println(-2 >>> 1);
        System.out.println(Integer.MAX_VALUE);// 2147483647
        // 原码:1000 0000... 0010  反码:1111 1111... 1101 补码:1111 1111... 1110 
        // 右移一位,高位补0 0111 1111... 1111 正数原码就是补码:值为int类型最大值 = 2147483647

上一篇 下一篇

猜你喜欢

热点阅读