1.数据类型
1.1基本分类
在java语言中将数据类型分为两大类:
(1)基本数据类型
byte、short、int、long、float、double、char、boolean
(2)引用数据类型
数组、类、接口、枚举、标注等
1.2常见的进制
在日常生活中采用十进制进行数据的表示,逢十进一,每个数字的权重:100 、101 ……
在计算机中采用二进制进行数据的表示,逢二进一,每个数字的权重:20 21 ……
1.3进制之间的转换
(1)正十进制转换为二进制的方式
a.除二取余法,让十进制整数不断地除以2然后取余数,知道商为0时将余数逆序排列;
b.拆分法,将十进制整数拆分为若干个二进制权重的和,若有该权重则下面写1,否则0
如: 30 => 16+8+4+2
0 0 0 1 1 1 1 0
128 64 32 16 8 4 2 1
(2)正二进制转换为十进制的方式
a.加权法,让二进制的每个数字乘以当前数位的权重再累加起来。
(3)负十进制转换为二进制的方式
a.将十进制的绝对值转换为二进制,然后进行按位取反再加1.
如:
-30 =》 将绝对值转换为二进制:0001 1110
=》 按位取反: 1110 0001
=》 再加1: 1110 0010
(4)负二进制转换为十进制的方式
a.先减1,再进行按位取反,采用加权法合并为十进制整数后添加负号。
扩展:原码、反码、补码的概念。
练习:
将66和80转换为二进制;
将-66和-80转换为二进制;
将0101 1110 和 0011 1101 转换为十进制(正);
将1010 1100 和 1110 0111 转换为十进制(负);
(5)二进制转换为八进制的方式
a.二进制三位 合并为 八进制一位,并使用0作为八进制的前缀;
如:
010 110 (二进制)=> 026 (八进制)
(6)八进制转换为二进制的方式
a.将每一位八进制拆分为三位二进制,并使用0b作为二进制的前缀(jdk1.7新特性)
如:
074 (八进制)=> 0b 111 100 (二进制)
(7)二进制转换为十六进制的方式
a.将每四位二进制合并为一位十六进制,并使用0x作为16进制的前缀;
如:
0101 1100 (二进制) => 0x 5c (十六进制)
(8)十六进制转换为二进制的方式
a.将每一位十六进制拆分为四位二进制,并使用ob表示二进制;
如:
0x a3 (十六进制) => 0b 1010 0011(二进制)
1.4单个字节表示的整数范围(重重之中)
在计算机的底层是采用二进制表示数据的,并使用最高位(左边)作为符号位,0代表非负数,1代表负数,而单个字节表示8位二进制位,具体整数范围如下:
非负数范围: 0000 0000 ~ 0111 1111 为0~127
负数范围 : 1000 0000 ~ 1111 1111 为-128~ -1
综上所述:
对于单个字节来说,所能表示的整数范围是:-128 ~ 127 。即 -27 ~ 27 -1
1.5整数类型
在Java语言中用于描述整数数据的类型有:byte、 short、 int 、long,推荐使用int类型。
其中byte类型在内存空间占1字节,因此表示范围为:(-27 ~27 -1) -128~127
其中short类型在内存空间占2字节,因此表示范围为:(-215 ~215 -1)
其中int类型在内存空间占4字节,因此表示范围为:(-231 ~231 -1)
其中long类型在内存空间占4字节,因此表示范围为:(-263 ~263 -1)
在程序中直接写出的整数数据叫做直接量/字面值/常量,如:66,该数据默认为int类型。若希望在程序中表达更大的直接量,则需要在直接量的后面加l或者L,推荐L表示long类型的直接量。
/*编程实现整数类型的使用*/
public class TestInt{
public static void main(String[] agrs){
byte b1 = 10;
// byte b1 = 1000;//TestInt.java:4: 错误: 不兼容的类型: 从int转换到byte可能会有损失
System.out.println("b1 = "+ b1);//b1 = 10
System.out.println("--------------");
short s1 = 1000;
System.out.println("s1 = "+ s1); //s1=1000
long l1 = 1000000000L;
System.out.println("l1 ="+ l1);//l1=1000000000
}
}