Shift operator in Java program output
•
Java
I encountered the following program, which behaved unexpectedly
public class ShiftProgram { public static void main(String[] args) { int i = 0; while(-1 << i != 0) i++; System.out.println(i); } }
If we consider the program output, when it reaches 32, the loop condition should return false and terminate, and it should print 32
If you run this program, it won't print anything, but it will enter an infinite loop Any ideas? Thank you first
Solution
Do you try to print out (- 1 < < I) in the loop to see what's wrong? If you do, you will see it:
-1 << 0 = -1 -1 << 1 = -2 -1 << 2 = -4 -1 << 3 = -8 -1 << 4 = -16 -1 << 5 = -32 -1 << 6 = -64 -1 << 7 = -128 -1 << 8 = -256 -1 << 9 = -512 -1 << 10 = -1024 -1 << 11 = -2048 -1 << 12 = -4096 -1 << 13 = -8192 -1 << 14 = -16384 -1 << 15 = -32768 -1 << 16 = -65536 -1 << 17 = -131072 -1 << 18 = -262144 -1 << 19 = -524288 -1 << 20 = -1048576 -1 << 21 = -2097152 -1 << 22 = -4194304 -1 << 23 = -8388608 -1 << 24 = -16777216 -1 << 25 = -33554432 -1 << 26 = -67108864 -1 << 27 = -134217728 -1 << 28 = -268435456 -1 << 29 = -536870912 -1 << 30 = -1073741824 -1 << 31 = -2147483648 -1 << 32 = -1 -1 << 33 = -2 -1 << 34 = -4 -1 << 35 = -8 -1 << 36 = -16 [.. etc ..]
According to language specification:
... so the results always remain negative
The document also tells you:
Therefore, if you use a shift of 32, interpret it as a shift of 32 and 32 0x1f, i.e. 0.1 shift, 0 is still - 1, not 0.1
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码