举例:
byte b= (byte) 0b10000001;
对于这个赋值表达式,b的值是多少?
可能觉得10000001的值是-1,那么此时b就等于-1了。
事实上:
System.out.println("b:"+b); //b: -127
-127的二进制表示应该为11111111啊,为什么呢?
你会发现10000001其实是11111111的补码,也就是说用二进制数赋值的时候,是作为补码存在的。其实,数值在计算机内部都是以补码形式存在的,输入的八、十、十六进制数都会转为二进制补码形式。
一般来说,我们说某个数的二进制表示是指其原码,但是有些数是没有原码的,如果不采用补码的话,就无法赋值了。例如byte类型内的-128。所以,赋值时采用补码形式。