Java基本数据类型
java共有八种基本数据类型,可分为四类:
整型:byte short int long
浮点型:float double
布尔型:boolean
字符型:char
java的强数据类型本质上就是在内存上开辟的不同内存空间。
数据类型的字节长度和取值范围
字节(Byte)是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符。一个字节存储8位无符号数,即1Byte(字节)=8bit(位),储存的数值范围为0-255。
若写成int a=10.0 是否可以运行?
不能运行。
如下图所示,是int类型和float类型的二进制占位情况。可以看出int类型有符号位占1位,数字位占31位,float类型的符号位占1位,另需要8位存放指数,数字位占23位。int和float的占位情况不同,所以当int类型的a被赋值浮点数10.0时,不能够运行。
为何byte类型的b=127+1,输出为(-128)?
有如下代码,输出结果为-128.
public static void main(String[] args){
byte a=127;
byte b=(byte)(a+1);
System.out.println(b);
}
byte类型的字节长度为1字节,128用二进制的形式表示为1000 0000,其反码和补码如下:
1000 0000 原码(1为符号位表示 负)
1111 1111 反码
(1)0000 0000 补码
注:负数的补码 是反码的符号位不变 剩下各位取反并末尾位+1 ,因每二进一 所以有九位(溢出)
在原码里面0000 0000和1 0000 0000都是表示0,这样比较浪费,在补码里面,就把10000 0000当作 -2^7 ,以扩大补码表示范围, 所以 byte b= (byte)128 输出为 -128。
使用补码,不仅仅修复了0的符号以及存在两个编码的问题,而且还能够多表示一个最低数。这就是为什么8位二进制,使用原码或反码表示的范围为[-127,+127],而使用补码表示的范围为[-128,127]。因为机器使用补码,所以对于编程中常用到的32位int类型,可以表示范围是:[-2^31,2^31-1],因为第一位表示的是符号位,而使用补码表示时又可以多保存一个最小值。
char类型
char用于C或C++中定义字符型变量,只占一个字节,取值范围为 -128 ~ +127(-2^7~2^7-1)。C语言中如int、long、short等数据类型不指定signed或unsigned时都默认为signed,但char在标准中不指定为signed或unsigned,编译器可以编译为带符号的,也可以编译为不带符号的。
给char类型的数据赋值字符时,需要用单引号 ‘ ’ 。
public static void main(String[] args){
char a='中';
char b='\u4e2d';
System.out.println(a);
System.out.println(b);
}
注:‘4e2d’是‘中’所对应的16位Unicode编码。