zoukankan      html  css  js  c++  java
  • Java:位移运算符

    Java中有三个位移运算符,用于对int类型整数的二进制补码进行操作:

    1. "<<": 左移运算符

    在二进制补码末尾添加“0”,之前的其他位相当于左移了一位,可看作成“乘以二”操作。

       例如,a = 10,a 的二进制表示为“0000 0000 0000 0000 0000 0000 0000 1010”,“a << 1”表示a的二进制表示左移一位,结果为“0000 0000 0000 0000 0000 0000 0001 0100”,对应十进制的“20”。

                b =-10, b 的二进制表示为“1111 1111 1111 1111 1111 1111 1111 0110”,“b<<1”代表b的二进制表示左移一位,结果为“1111 1111 1111 1111 1111 1111 1110 1100”,对应十进制“-20”。

    2. ">>": 右移运算符

    去掉二进制补码末尾几位,并在最前面添加符号位正数添“0”、负数添“1”。">>1"去掉最后一位,">>2"去掉最后两位。不能单纯的看作成“除以二”操作。

       例如,a = 9, “a>>1"代表a的二进制补码“0000 0000 0000 0000 0000 0000 0000 1001”右移一位,结果为“0000 0000 0000 0000 0000 0000 0000 0100”,对应十进制的“4(不是“除以二”操作)

                b = -9,“b>>1”代表b的二进制补码“1111 1111 1111 1111 1111 1111 1111 0111”右移一位,结果为“1111 1111 1111 1111 1111 1111 1111 1011”,对应十进制的“-5”。

    3. ">>>": 无符号右移运算符

    不再考虑符号位,在最前面添加“0”(正数前面的“0”符号位可以省略)

       例如,b = -9,“b >>> 1”代表b的二进制补码“1111 1111 1111 1111 1111 1111 1111 0111”右移一位,结果为“0111 1111 1111 1111 1111 1111 1111 1011”,对应十进制的“2147483643”。

    public class Test {
        public static void main(String[] args) {
            int a = -9;
            System.out.println("a = " + a);
            System.out.println("a的二进制表示:       " + Integer.toBinaryString(a));
            System.out.println("");
            // "<<"左移运算符
            int a1 = a << 1;
            System.out.println("a<<1 = " + a1);
            System.out.println("a<<1后的二进制表示:  " + Integer.toBinaryString(a1));
            System.out.println("");
            // ">>"右移运算符
            int a2 = a >> 1;
            System.out.println("a>>1 = " + a2);
            System.out.println("a>>1后的二进制表示:  " + Integer.toBinaryString(a2));
            System.out.println("");
            // 无符号右移运算符
            int a3 = a >>> 1;
            System.out.println("a >>> 1 =" + a3);
            System.out.println("a>>>1后的二进制表示: " + Integer.toBinaryString(a >>> 1));
    
        }
    }
    

      

    运行结果:

    2018-01-02 18:51:21

  • 相关阅读:
    触摸屏、X11去掉鼠标
    RPM验证与数字签名(Verify/Signature)
    GPG入门
    DIY的RPM包怎么签名呢
    DIY的RPM包怎么签名呢 How to sign your custom RPM package with GPG key
    iOS开发基础知识--碎片40
    iOS开发基础知识--碎片39
    iOS开发基础知识--碎片38
    iOS开发基础知识--碎片37
    iOS开发基础知识--碎片36
  • 原文地址:https://www.cnblogs.com/huiAlex/p/8178590.html
Copyright © 2011-2022 走看看