下面程序示范了强制类型转换的实例

  1. public class NarrowConversion {
  2.     public static void main(String[] args) {
  3.         int iValue=233;
  4.         //强制把一个int类型的值转换成byte类型的值
  5.            byte bValue=(byte) iValue;
  6.            //将输出-23
  7.            System.out.println(bValue);
  8.              double dValue=3.98;
  9.            //强制把一个double型的值转换为int
  10.              int i=(int) dValue;
  11.              System.out.println(i);
  12.     }
  13. }

运行后的输出结果:

  1. 23
  2. 3

上面程序中,将一个233整型强制类型转换为byte类型,从而变成了-23,这就是典型的溢出。

现在就上面的结果进行一下分析:

首先我们来了解一知识下计算机的基础:

所有数字在计算机底层都是以2进制形式存在的 ,原码就是直接将一个10进制数转换成2进制数,但计算机是以补码的形式保存所有的整数。补码的计算规则如下:正数的补码和原码完全相同,负数的补码是其反码加1;反码是对原码按位取反,除了最高位(符号位)保持不变。

现在继续,看看上面的转换问题,下面示范了转换的过程:

  1. //32位的int型 00000000000000000000000011101001
  2. //转换为8位的byte型11101001


上图,就是负数补码和源码转换的示意图!

基本数据类型强制类型转换

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据