2014-02-16 69 views
0

位移是否有限制?位移是否有限制?

public static void main(String args[]) 
{ 
    int i=10; 
    System.out.println(i<<32); 
} 

輸出爲10

但我知道它的不正確。

回答應該是10 * 2 32 = 4.29 * 10

這是爲什麼?

+1

Java int是一個32位,二補數有符號整數;我很驚訝你的prorgam的輸出是10 ... – fge

+0

@Nipun但你的答案不適合int ... – Leo

+0

你可以檢查另一個類似的問題[http://stackoverflow.com /questions/14817639/java-bit-operations-shift](http://stackoverflow.com/questions/14817639/java-bit-operations-shift) – Devavrata

回答

1

由於iint,所以只使用5個最低位。

32的最後5位是:

你的程序等同於:

System.out.println(i<<0); 

不會改變的數量。

如果你想這個工作,你應該使用long來代替。請參閱this link以獲得最佳解釋。

+1

thanx有用鏈接 – Nipun

2

是,換檔因子由modulo'ed:

  • 32,如果移位操作數的類型是charshortint
  • 64,如果移位的操作數的類型是long