Java基本数据类型的转换
今天我们来讨论一下java中6种基本数据类型的转换 。它们分别是:byte,short,int,long,double,float 。
记住一点,数据范围小的类型转换成范围大的类型,是不会出现问题的 。但是如果是范围大的数据类型往范围小的类型去转换,就可能会出现问题了 。我将6种类型的互转分成30种类型,下面我们将这30种类型都实践一下 。每种类型的转换,我这里分4种情况,正数的转换,负数的转换,临界值(最大值和最小值)的转换,边界外的转换,边界内的转换 。
byte -> short
// 正数byte a = 1;// 负数byte b = -1;// 最大值byte c = 127;// 最小值byte d = -128;System.out.println((short)a);// 1System.out.println((short)b);// -1System.out.println((short)c);// 127System.out.println((short)d);// -128System.out.println((short)(c a));// 128System.out.println((short)(d b));// -129
我们首先看上面的代码块 。发现这五种情况的转换,结果都是正确的 。这是因为short类型能够表示的范围大于byte类型,所以是不会出现问题 。
short -> byte
short a = 1;short b = -1;short c = Short.MAX_VALUE; // 32767short d = Short.MIN_VALUE; // -32768short f = 128;short g = -129;System.out.println((byte)a);// 1System.out.println((byte)b);// -1System.out.println((byte)c);// -1System.out.println((byte)d);// 0System.out.println((byte)(c a));// 0System.out.println((byte)(d b));// -1System.out.println((byte)f);// -128System.out.println((byte)g);// 127
我们会发现只有前面两个输出是对的 其他都是错误的 。下面我们就来分析一下 为什么会出现这样的情况 。
首先来看c(32767)在计算机是怎么存储的 。我们都知道计算机存储数据都是按二进制来存储的,因此将c的值转换成二进制就是如图下:
如果是范围大类型转换成范围小的类型,计算机就会采取截取的方式,注意截取是从高位开始的 。因为short是2个字节,byte是1个字节,因此被截取之后的结果如下:
提示
截取的时候,计算机是不知道哪一位是用来表示符号位的,因此,截取之后有可能符号位跟截取之前不一致 。
截取之后符号位是1 。说明截取之后,该数变成了一个负数 。在以前的文章里面说过,对于负数,计算机是采用补码的形式进行存储的 。那么我们就来推算一下该种数据对应的原码是多少:
最下面的一行就是其对应的原码 。所以c的值被强行转换成short之后变成了-1 。
下面我们来看一下d(-32768)为什么转成short之后是0?首先我们来看一下计算机是怎么存储这个数的 。
-32768转换成二进制是:
【r语言lag函数用法 java怎么把负数转正数】从最高位截取,因此就只剩下了8个0,因此转换成10进制就是0 。
推荐阅读
- 简单的来给大家介绍下因特d70指纹锁怎么设置提示音语言
- 需求量的图像,基本函数图像
- excel怎么计算不同项个数 excel统计文本个数的函数
- java是脚本语言吗 脚本语言有哪些
- 需求的价格弹性系数 「利润函数的一阶导数」
- 二次函数顶点坐标怎么算 二次函数顶点公式
- st语言编程语言实例讲解 st编程语言详解
- 7个excl函数应用计算 excl函数有哪些
- 凯恩斯货币需求函数 凯恩斯货币需求理论
- 顶点式二次函数表达式怎么求 2次函数顶点式