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
  • 相关阅读:
    无标题
    UVA 11987 并查集删点
    屯题 (bestcoder #62~#75)
    codeforces 293E Close Vertices 点分治+滑窗+treap
    hdu4670 Cube number on a tree 点分治
    hdu4812 D Tree 点分治
    poj2112 Boatherds 点分治
    HDU 4866 Shooting 二分+主席树
    poj1741 Tree 点分治
    关于点分治。。。
  • 原文地址:https://www.cnblogs.com/igoodful/p/8722158.html
Copyright © 2011-2022 走看看