// What results from the following code fragment?
int i = 5;
int j = 10;
System.out.println(i + ~j);
计算机中的数都是以原码存储。
在计算机中,int i = 5,编码为0000 0000 0000 0101;
int j = 10,编码为0000 0000 0000 1010;
~j,编码为1111 1111 1111 0101;
计算机中的1111 1111 1111 0101(补码)对应的原码为1000 0000 0000 1011,即十进制-11,
所以最终的打印结果为-6.
原码:符号位加上真值的绝对值,即用第一个二进制位表示符号(正数为0,负数为1),其余位表示值。
反码:正数的反码 = 其原码;
负数的反码 = 符号位不变,其余各位取反。
补码:正数的补码= 其原码;
负数的补码 = 符号位不变,其反码+1。