Suk*_*bir 7 java bit-manipulation
System.out.println((-1<<31));
Run Code Online (Sandbox Code Playgroud)
为什么这会给出输出-2147483648
我知道-1 << 31会给100000000000000000000000000000,所以它应该给ans (int)Math.pow(2,31) 等于2147483648
-1<<31给出10000000000000000000000000000000哪个是-2147483648,而不是2147483648.注意左边的位是符号位,所以如果它是1,这是一个负数.
BTW,1<<31也会给你-2147483648,因为2147483648高于Integer.MAX_VALUE.另一方面,1L<<31会给你2147483648,因为结果将是一个long.