目录
1.Java的基本数据类型
byte 1B 8位
short 2B 16位
int 4B 32位
long 8B 64位
float 4B 单精度浮点数 字面值加F或f 1.3e10F=1.3*10^10
double 8B 双精度浮点数 字面值加d或者不加
boolean 布尔类型 字面值 true false 布尔类型和其它数据类型不能互换使用(java里的规定)
char 2B 字符
int a = 10;//十进制数
int a = 010;//8进制数
int a = 0X10;//16进制数
int a = 0b10;//2进制数
2.关于char
1.采用Unicode编码方式
2.取值范围 0到2的16次方 无负数 无符号整数
3.每个字符都会对应一个整数,存储字符就是存储这个整数
(数据在计算机中用二进制补码(首位表示符号位)表示)
4.A的三种表示方式
char c = 'A';
char c = 65 ;//用字符的编码65表示A,97表示a,48表示0;
char c = '\u0041';//006541是16进制数表示65,这种采用Unicode编码表示
3.计算时表达式数据类型的判断
a?b
如果a,b的数据类型中有double,则这两个数据运算时数据类型都是double;
如果a,b的数据类型中无double,有float,则这两个数据运算时数据类型都是float;
如果a,b的数据类型中无double,float,有long,则这两个数据运算时数据类型都是long;
如果a,b的数据类型中上述三种都没有,则这两个数据运算时数据类型都是int(即数据类型是byte short char在运算时数据类型会自动向上转型为int);
4.强转类型如何计算
如果是byte short char类型强转
由于数据类型计算时自动向上转型为int型,而int型是32位 存储占4个字节,如下的例子,
byte是8位 存储占1个字节
246用32位二进制数表示为
0000 0000 0000 0000 0000 0000 1111 0110
而byte型只有8位所以要截取 为 1111 0110
而在计算机中的二进制数首位表示符号位 所以此补码变为原码为1000 1010,为-10;
如果此例子是short型强转 由于short 是16位 存储占用2个字节
所以截取后为 0000 0000 1111 0110
正数 补码原码一致 所以为246
例子:
byte b = (byte)(123+123);
System.out.println(b);//结果是-10;