下面程序示范了强制类型转换的实例
- public class NarrowConversion {
- public static void main(String[] args) {
- int iValue=233;
- //强制把一个int类型的值转换成byte类型的值
- byte bValue=(byte) iValue;
- //将输出-23
- System.out.println(bValue);
- double dValue=3.98;
- //强制把一个double型的值转换为int
- int i=(int) dValue;
- System.out.println(i);
- }
- }
运行后的输出结果:
- –23
- 3
上面程序中,将一个233整型强制类型转换为byte类型,从而变成了-23,这就是典型的溢出。
现在就上面的结果进行一下分析:
首先我们来了解一知识下计算机的基础:
所有数字在计算机底层都是以2进制形式存在的 ,原码就是直接将一个10进制数转换成2进制数,但计算机是以补码的形式保存所有的整数。补码的计算规则如下:正数的补码和原码完全相同,负数的补码是其反码加1;反码是对原码按位取反,除了最高位(符号位)保持不变。
现在继续,看看上面的转换问题,下面示范了转换的过程:
- //32位的int型 00000000000000000000000011101001
- //转换为8位的byte型11101001
上图,就是负数补码和源码转换的示意图!
基本数据类型强制类型转换