What results from the following code fragment()?
int i = 5;
int j = 10;
System.out.println(i + ~j);
A、Compilation error because”~”doesn’t operate on integers
B、-5
C、-6
D、15
题目解析:
计算方式一、
计算机中以补码存储。
正数的原码/反码/补码相同,所以
10存储为00000000 00000000 00000000 00001010
~10的原码为11111111 11111111 11111111 11110101(10取反)
~10的反码为10000000 00000000 00000000 00001010(最高位符号位,不变,其余位取反)
~10的补码为10000000 00000000 00000000 00001011(负数的补码=反码+1)
所以~10 = -11
计算方式二、
负数的补码 = 原码取反 + 1,即:
-n = ~n + 1 → ~n = -n -1
~j:~10 = - 10 - 1 = -11
i + j = 5 + -11 = -6
閱讀更多 電腦學堂 的文章