zoukankan      html  css  js  c++  java
  • java的移位运算详解(举例说明)

    1)java中无符号右移:>>>,下面是一个int型的负数,然后每次移动一位。

     

    int k = -0x123;System.out.println(Integer.toBinaryString(k));
    int n = k>>>1;System.out.println(Integer.toBinaryString(n));
    n = n>>>1;System.out.println(Integer.toBinaryString(n));
    n = n>>>1; System.out.println(Integer.toBinaryString(n));
    。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

     

    11111111111111111111111011011101
    1111111111111111111111101101110
    111111111111111111111110110111
    11111111111111111111111011011
    1111111111111111111111101101
    111111111111111111111110110
    11111111111111111111111011
    1111111111111111111111101
    111111111111111111111110
    11111111111111111111111
    1111111111111111111111
    111111111111111111111
    11111111111111111111
    1111111111111111111
    111111111111111111
    11111111111111111
    1111111111111111
    111111111111111
    11111111111111
    1111111111111
    111111111111
    11111111111
    1111111111
    111111111
    11111111
    1111111
    111111
    11111
    1111
    111
    11
    1
    0
    0
    0

    2)下面是一个整型int的正数的无符号移位:因为正数的最前面一位是符号位为0,因此一个32位的正数一般都是从第一个非零开始表示,前面的零都省略表示出来。

    int k = 0x123;System.out.println(Integer.toBinaryString(k));
    int n = k>>>1;System.out.println(Integer.toBinaryString(n));
    n = n>>>1;System.out.println(Integer.toBinaryString(n));
    n = n>>>1; System.out.println(Integer.toBinaryString(n));
    。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

    100100011

    10010001

    1001000

    100100

    10010

    1001

    100

    10

    1

    0

    0

    0

     

    0

    3)有符号右移“>>”,负数右移如下:每次移位都是从最右边移除一位,然后最前面添加一位“1”来填充,因此总的位数不变,依旧是32位。

    int k = -0x123;System.out.println(Integer.toBinaryString(k));
    int n = k>>1;System.out.println(Integer.toBinaryString(n));
    n = n>>1;System.out.println(Integer.toBinaryString(n));
    n = n>>1; System.out.println(Integer.toBinaryString(n));
    。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

    11111111111111111111111011011101
    11111111111111111111111101101110
    11111111111111111111111110110111
    11111111111111111111111111011011
    11111111111111111111111111101101
    11111111111111111111111111110110
    11111111111111111111111111111011
    11111111111111111111111111111101
    11111111111111111111111111111110
    11111111111111111111111111111111
    11111111111111111111111111111111
    11111111111111111111111111111111

    4)有符号右移“>>”,正数右移如下:每次移位都是从最右边移除一位,然后最前面添加一位“0”来填充,因此总的位数不变,依旧是32位,但是只显示首位为非零的开始。

    int k = 0x123;System.out.println(Integer.toBinaryString(k));
    int n = k>>1;System.out.println(Integer.toBinaryString(n));
    n = n>>1;System.out.println(Integer.toBinaryString(n));
    n = n>>1; System.out.println(Integer.toBinaryString(n));
    n = n>>1; System.out.println(Integer.toBinaryString(n));
    n = n>>1; System.out.println(Integer.toBinaryString(n));
    。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

    100100011
    10010001
    1001000
    100100
    10010
    1001
    100
    10
    1
    0
    0
    0

     5)左移,只有有符号数左移。正数左移。

    int k = 0x123;System.out.println(Integer.toBinaryString(k));
    int n = k<<1;System.out.println(Integer.toBinaryString(n));
    n = n<<1;System.out.println(Integer.toBinaryString(n));
    n = n<<1; System.out.println(Integer.toBinaryString(n));
    n = n<<1; System.out.println(Integer.toBinaryString(n));
    。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

    100100011
    1001000110
    10010001100
    100100011000
    1001000110000
    10010001100000
    100100011000000
    1001000110000000
    10010001100000000
    100100011000000000
    1001000110000000000
    10010001100000000000
    100100011000000000000
    1001000110000000000000
    10010001100000000000000
    100100011000000000000000
    1001000110000000000000000
    10010001100000000000000000
    100100011000000000000000000
    1001000110000000000000000000
    10010001100000000000000000000
    100100011000000000000000000000
    1001000110000000000000000000000
    10010001100000000000000000000000
    100011000000000000000000000000
    1000110000000000000000000000000
    10001100000000000000000000000000
    11000000000000000000000000000
    110000000000000000000000000000
    1100000000000000000000000000000
    11000000000000000000000000000000
    10000000000000000000000000000000
    0
    0
    0

    6)左移,只有有符号数左移。负数左移。

    int k = -0x123;System.out.println(Integer.toBinaryString(k));
    int n = k<<1;System.out.println(Integer.toBinaryString(n));
    n = n<<1;System.out.println(Integer.toBinaryString(n));
    n = n<<1; System.out.println(Integer.toBinaryString(n));
    n = n<<1; System.out.println(Integer.toBinaryString(n));
    。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

    11111111111111111111111011011101
    11111111111111111111110110111010
    11111111111111111111101101110100
    11111111111111111111011011101000
    11111111111111111110110111010000
    11111111111111111101101110100000
    11111111111111111011011101000000
    11111111111111110110111010000000
    11111111111111101101110100000000
    11111111111111011011101000000000
    11111111111110110111010000000000
    11111111111101101110100000000000
    11111111111011011101000000000000
    11111111110110111010000000000000
    11111111101101110100000000000000
    11111111011011101000000000000000
    11111110110111010000000000000000
    11111101101110100000000000000000
    11111011011101000000000000000000
    11110110111010000000000000000000
    11101101110100000000000000000000
    11011011101000000000000000000000
    10110111010000000000000000000000
    1101110100000000000000000000000
    11011101000000000000000000000000
    10111010000000000000000000000000
    1110100000000000000000000000000
    11101000000000000000000000000000
    11010000000000000000000000000000
    10100000000000000000000000000000
    1000000000000000000000000000000
    10000000000000000000000000000000
    0
    0
    0

     

     

     

    igoodful@qq.com
  • 相关阅读:
    第四章 源代码的下载和编译 心得笔记
    第三章 Git使用入门 心得笔记
    第二章 搭建Android开发环境 心得笔记
    第一章 Android系统移植与驱动开发概述 心得笔记
    第十章
    第九章
    第八章
    第七章
    第六章
    第五章的体会
  • 原文地址:https://www.cnblogs.com/igoodful/p/8722158.html
Copyright © 2011-2022 走看看