1.运算符 += 与 正常加法 的区别
(1)1字节byte=8bit位 (范围-128至127)
(2)运算规则:自动类型提升(byte(1字节) 、short(2字节)、char(2字节) -> int (4字节)-> long (8字节)-> float(4字节) -> double(8字节)),1字节=8bit。
首先需要了解:byte为什么是-128到127
计算机中数值表示都是用补码来表示的,为了方便减法的计算(将减法变成加法)产生的补码(补码详解:https://editor.youkuaiyun.com/md/?articleId=108949882)
数值 | 原码 | 补码 |
---|---|---|
-128 | 无法表示 | 1000 0000 |
-127 | 1111 1111 | 1000 0001 |
-126 | 1111 1110 | 1000 0010 |
0 | 0000 0000 | 0000 0000 |
127 | 0111 1111 | 0111 1111 |
byte b = 127;
b = b + 1;//报错
b += 1; //-128
b += 2;//-127
System.out.println(b);
通过结果可知,正常的运算因超出范围会报错,而+=混合赋值运算符,会使数据类型扩大,127+1= [0111 1111]补 + [0000 0001]补=[1000 0000]补,[1000 0000]补代表-128。同理127+2= [0111 1111]补 + [0000 0010]补=[1000 0001]补=[1111 1111]原= -127。很明显结果并不正确,是按二进制计算所得结果,因此混合赋值运算符,会使数据类型扩大。