【Java基础面试题】求System.out.println(~100+1);的打印值

55 阅读1分钟

这里主要用到有符号数补码的互补对称原则;
Java中有符号数以补码的形式存储,以4位二进制为例展示补码编码规则;

image.png
如上图,以-3(1101)为例,取反(0010)+1可得到正3的值;
所以数字补码的互补对称原则为 -n = ~n+1 ;
(该规则要去除最小数据,由图可知1000取反+1会又转会该最小数据1000);

所以处理类似问题,套入互补对称公式即可;

System.out.println(~100+1); //-100 (n就是100,-100=~100+1)

//其它变型
System.out.println(~100); //-101  (n是100, ~n=-n-1, -100-1=~100)
System.out.println(~-100); //99   (n就是-100, ~n=-n-1, -(-100)-1)