一些收藏Android开发

位移运算<<、>>和>>>

2021-01-02  本文已影响0人  青叶小小

一、前言

在任何语言中,乘/除的倍数计算,位移运算的效率都是最高的,如果看过《计算机组成原理》(大学课本),就应该知道;

那乘法 or 除法怎么计算得来?

  1. ALU是通过加法 or 减法,以及位移操作来完成的;
  2. 位移是在寄存器中直接完成;

因此,位移操作是直接在硬件中完成,无需软件辅助,或额外的硬件来协助!

二、Java中的位移

你可能见过:

2.1、位移 >> 和 <<

这两个很常见,带符号右移(>>)和带符号左移(<<),移动之后的空位用『0』填充

public class Main {
    public static void main(String[] args) {
        int x = -4;
        print(x, 1, 1);
        print(x, 2, 1);
        print(x, 2, 2);
    }

    private static void print(int value, int offset, int num) {
        int x = value;
        String symbol = "";
        switch (offset) {
            case 2:
                x = x >> num;
                symbol = " >> ";
                break;
            default:
                break;
        }
        System.out.println(value + symbol + "= " + x + " (" + Integer.toBinaryString(x) + ")");
    }
}

// 输出结果
// -4    = -4 (11111111111111111111111111111100)
// -4 >> = -2 (11111111111111111111111111111110)
// -4 >> = -1 (11111111111111111111111111111111)

2.2、只有>>> ,没有<<<

既然上面说了是带符号的,那这里就是不带符号的,算术功能同上:
不带符号右移(>>>),没有不带符号的左移『<<<』,移动之后的空位用『0』填充

public class Main {
    public static void main(String[] args) {
        int x = -4;
        System.out.println("max = " + Integer.MAX_VALUE + " (" + Integer.toBinaryString(Integer.MAX_VALUE) + ")");
        print(x, 1, 1);
        print(x, 3, 1);
        print(x, 3, 2);
    }

    private static void print(int value, int offset, int num) {
        int x = value;
        String symbol = "";
        switch (offset) {
            case 3:
                x = x >>> num;
                symbol = " >>> ";
                break;
            default:
                break;
        }
        System.out.println(value + symbol + "= " + x + " (" + Integer.toBinaryString(x) + ")");
    }
}
// 输出结果
// max    = 2147483647 (01111111111111111111111111111111)
// -4     = -4         (11111111111111111111111111111100)
// -4 >>> = 2147483646 (01111111111111111111111111111110)
// -4 >>> = 1073741823 (00111111111111111111111111111111)
上一篇 下一篇

猜你喜欢

热点阅读