public class Test01{
public static void main(String[] args){
int a = 129;
byte b =(byte)a;
System.out.println(b);//b为-127
}
}
分析:
128的二进制是:10000000
int类型的128二进制表示为:00000000 00000000 00000000 10000001
这里的输出结果是-127
为什么会这样呢?
原因在于int类型的变量在内存中是占32位
强制转换为byte类型,byte是8位
也就是说byte类型变量接收转变后会将int类型的前面24位会舍去
只按照8位算
byte类型的128是:10000001
由于最高位是符号位:1代表是一个负数
而存在内存中的这八位是(负数在计算机中是以补码的形式存在)
补码转换成原码:减1取反
所以:100000001-1=10000000 取反:11111111
最高位是符号位,所以-(64+32+16+8+4+2+1)=-127
注意:综上所述,强制转换需谨慎,不超过转换后的范围还好,超过了范围会失精度。
运算符
+=
a+=b
a=a+b
-=
a-=b
a=a-b
*=
a*=b
a=a*b
/=
a/=b
a=a/b
%=
a%=b
a=a%b
注意:byte a += 3; byte a = a +3 他们是不同的,因为a + 3是一个int类型,如果要赋值给byte a 就需要强制转换。
王华春一Jason
原创文章 153获赞 99访问量 15万+
关注
他的留言板
展开阅读全文
作者:王华春一Jason