簡體   English   中英

Java:移位負數

[英]Java: shift negative number

據我所知,將一個正整數向左移1的結果與將其乘以2的結果相同(如果它沒有溢出)

負整數會怎樣?

如果x << 1不溢出,是否總是等於x * 2?

我試過了:

int num = -1;
for (int i= 0; i < 32; i++){
    System.out.println(num << i);
}

它打印

-1
-2
-4
-8
-16
-32
-64
-128
-256
-512
-1024
-2048
-4096
-8192
-16384
-32768
-65536
-131072
-262144
-524288
-1048576
-2097152
-4194304
-8388608
-16777216
-33554432
-67108864
-134217728
-268435456
-536870912
-1073741824
-2147483648

是的,向左移1總是等於乘以2 (溢出除外)。 JLS第15.19節甚至說:

n << s的值是n個左移的s位位置; 這等效於(即使發生溢出)乘以2的冪s。

我認為JLS指出“即使發生溢出”,因為它等效於可能也會溢出的乘法運算。

這是一個移位,您應該看一下發生了什么:-1是0xFFFFFFFF,向左移位1位后,我們將得到0xFFFFFFFE,它是-2,依此類推

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM