因为刚刚学习了强制性的打字转换,所以试着用自己的理解进行了总结。 如果有什么问题的话,请指出来评论。
int a=300;
byteb=(byte ) a;
system.out.println(a );
system.out.println(b;
执行结果如下。
如果强制转换超出byte存储范围的int类型数,转换后的值可能会发生变化。
原因: int型数据原本是以32位(最高位为符号位)的2进制存储在计算机内存中的,转移到强byte型后,只剩下该数据的后8位。
这下面的8位是变换后数量的补数,最高位是符号位。 如果最高有效位为1,则转换后的数量为负数。 需要在该补数上反过来加1,得到强旋转后的数。
ps:
1 .那么为什么最高位为1且为负呢?
因为最高位是符号位,符号位是0,是正数,符号位是1,是负数。
2 .那么,如果正的8位都是1,用刚才的方法会不会被误判为负数?
不,byte类型的正数最大为127,8位二进制文件为0111 1111,最高有效位为0,因此转换后的最高有效位为1,一定为负数。
3 .那么,向其他类型的强制转换满足上述说法吗?
满意! 例如:
long c=2147483651L; 大于//int型的最大值!
intd=(int ) c;
system.out.println(c );
system.out.println(d );
执行结果如下。
请参阅源代码:
公共类Java daily _2{
publicstaticvoidmain (string [ ] args ) {
int a=511;
byteb=(byte ) a;
system.out.println(a );
system.out.println(b;
long c=2147483651L; 大于//int型的最大值!
intd=(int ) c;
system.out.println(c );
system.out.println(d );
}
}