在计算机中数据都是以二进制原码的形式存在的,而数字间的运算都是以补码的形式进行。然而补码又分为正数的补码跟负数的补码;
原码:
1.数字的最原始二进制
反码:
1. 一个数如果是正,则它的反码与原码相同;
2. 一个数如果是负,则符号位为1,其余各位是对原码取反;
补码:
1. 一个数如果为正,则它的补码跟原码相同
2. 一个数如果是负,则它的补码为负数反码加1
接下来要说的就是java中byte跟int之间的关系,1byte=8bit,1int=4byte=32bit,在java编程中经常要遇到的问题是byte跟int的转换:
byte 占8位,取值范围是11111111~011111111 -128到127
int 占32位。取值范围是 -2的31次方 到2的31次方
int转byte则是取低8位丢弃后24位,并将取的结果作用于byte的取消范围内;
byte转int则是以补位的形式补齐后24位形成一个32位的int,因为byte的取值范围有限,所以在byte表示的复数转为int自然随取值范围的扩散而扩散,即比如-128在byte中是11111111,转为int自然会转为-128在int的位置,所以byte转int,如果byte的数是复数,转int自然是复数,为了保证byte转int的数为正,那么就得将后24位舍弃(丢弃最高位符号位) &0xff