java 一道小问题

来源:百度知道 编辑:UC知道 时间:2024/06/25 18:11:15
Question No: 1
1.public class test (
2. public static void main (String args[]) {
3. int i = 0xFFFFFFF1;
4. int j = ~i;
5.
6. }
7. )
What is the decimal value of j at line 5?
A. 0
B. 1
C. 14
D. –15
E. An error at line 3 causes compilation to fail.
F. An error at line 4 causes compilation to fail.
答案: C
为什么???
用中文详细说明一下

先把变量i转成二进制,
F=1111
1=0001
就应该是1111......11110001
j是i按位取反
就应该是0000......00001110,前面的可以忽略掉了
也就是1110,
1110转成十进制就是14 (8+4+2+0)

首先 i = 0xFFFFFFF1 也就是i=-15;
~i 也就是对-15按位取非 ,就是说向前移一位,也就是-14,然后-14再取非就变成14了...明白?

其实很简单:你可以这样看,i 的二进制表示是:
1111 1111 1111 1111 1111 1111 1111 0001
,取反后便成了:0000 0000 0000 0000 0000 0000 0000 1110,便是 0x0000000E 了,即 14.