Java Left Shift & Right Shift

  • 本文关键字:Shift Right Java Left java
  • 更新时间 :
  • 英文 :


这更像是一个澄清问题。假设我在int myvar中有一个值,其位表示为10000000000000000000000000000000。现在这是32位的int在java中的实际大小(请纠正我,如果这个假设不能做出)。

现在的问题是myvar <<1 ?是1000…000是因为MSB中的"1"被移出了吗?myvar>> 1是什么?会是110000....00000吗?

最后,我们如何确定占用一个变量的位数?我的意思是,在Java中我们有sizeOf(int)函数给出32作为答案吗?由于

假设我在int myvar中有一个值,其位表示为10000000000000000000000000000000....现在的问题是myvar <<1 ?是1000…000是因为MSB中的"1"被移出了吗?myvar>> 1是什么?会是110000....00000吗?

让我们来看看

int myvar = Integer.MIN_VALUE;
System.out.println(Integer.toBinaryString(myvar));
System.out.println(Integer.toBinaryString(myvar << 1));
System.out.println(Integer.toBinaryString(myvar >> 1));

输出
10000000000000000000000000000000
0
11000000000000000000000000000000

我们有sizeOf(int)函数在Java中给我们32作为答案吗?

不完全是。但是在包装器类型中有SIZE字段

System.out.println("Integer: " + Integer.SIZE);
System.out.println("Double: " + Double.SIZE);

输出
Integer: 32
Double: 64

您对位移位的理解是正确的。下面的代码将对此进行确认。对于Java中的sizeOf函数,所有int型都占用32位。时期。至于更一般的sizeOf函数,这是一个比其他SO问题更复杂的问题。这就是说EHCache在这里有一个相当不错的实现。

    int v1 = 1 << 31;
    int v2 = v1 << 1;
    int v3 = v1 >> 1;
    int v4 = v1 >>> 1;
    // -2147483648 is 10000000000000000000000000000000 and has 1 bits set
    System.out.println( v1 + " is " + Integer.toBinaryString(v1) + " and has "+Integer.bitCount(v1)+" bits set");    
    // 0 is 0 and has 0 bits set
    System.out.println( v2 + " is " + Integer.toBinaryString(v2) + " and has "+Integer.bitCount(v2)+" bits set");
    // -1073741824 is 11000000000000000000000000000000 and has 2 bits set    
    System.out.println( v3 + " is " + Integer.toBinaryString(v3) + " and has "+Integer.bitCount(v3)+" bits set");    
    // 1073741824 is 1000000000000000000000000000000 and has 1 bits set
    System.out.println( v4 + " is " + Integer.toBinaryString(v4) + " and has "+Integer.bitCount(v4)+" bits set");    

int是32位有符号的,因此第一个位用于符号+/-所以实际上只有31位决定了它的值。请参考以下网址http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

also URL https://codereview.stackexchange.com/questions/58472/bitshift-code-compacting/58498#58498

有一个用于位移位的工作代码-支持右/左位移位。你可以从问题或答案中选择任何一个程序,用你想要移动的数字和你想要移动的程度来运行它……你可以立即得到答案…

最新更新