进制转换
常用的进制:
- 二进制:BIN,1010
- 八进制:OCT,012
- 十进制:DEC,10
- 十六进制:HEX,0xA
数据类型之间的转换
- 自动类型转换(隐式转换):
- byte -> short -> int -> long -> float -> double
- char -> int -> long -> float -> double
- 强制类型转换(显式转换):
会导致精度丢失,甚至数据溢出。
例:
int money = 100;
double salary = money;// 由于精度不会丢失,所以可以自动转换。
System.out.println(money);
System.out.println(salary);
int pay = (int) salary;// 由于精度会丢失,所以需要加上强制转换。
System.out.println(pay);
char c1 = 'A';
int i1 = c1;
System.out.println(i1);
int i2 = 255;
char c2 = (char) i2;// 根据ASCII编码将数字转换为字符
System.out.println(c2);
short s1 = 129;
byte b1 = (byte) s1; // 如果强转后的类型不足以存放之前的数据大小,会出现数据溢出的现象。
System.out.println(b1);
运算符
- 赋值运算符: =
- 算术运算符: + - * / % ++ – += -= *= /= %=
- 关系运算符: > < >= <= == !=
- 逻辑运算符: && || !
- 位运算符(面向二进制): & | << >>
- 条件运算符:三元表达式,三元运算符,三目运算符
- 表达式1 条件运算符 表达式2 ? 表达式3 : 表达式4
- 如果?号前面的判断结果为true,运算的结果是表达式3,否则运算结果是表达式4。
优先级:算术 > 关系 > 逻辑 > 赋值
例:
int i = 1;
int j = 2;
int z1 = i + j;// 3
int z2 = i - j;// -1
int z3 = i / j;// 0
int z4 = i % j;// 1
double z5 = i / j;// 两个整数使用/表示取整
double z6 = 1 / 2.0;// 如果有一个数字是浮点型,那么就是除法。
double z7 = i * 1.0 / j;
//System.out.println(z7);
int i1 = 1;
i1++;// 自加:i1 = i1 + 1
System.out.println(i1);
i1--;// 自减:i1 = i1 - 1
System.out.println(i1);
++i1;
System.out.println(i1);
--i1;
System.out.println(i1);
System.out.println(i1++);// 先打印再++
System.out.println(++i1);// 先++再打印
int i2 = i1++;// 先赋值再++
int i3 = ++i1;// 先++再赋值
System.out.println(i2);
System.out.println(i3);
int i4 = 5;
i4+=5;// i4 = i4 + 5
System.out.println(i4);
i4/=3;// i4 = i4 / 3
System.out.println(i4);
i4%=3;// i4 = i4 % 3
System.out.println(i4);
int i5 = 5;
int i6 = 4;
System.out.println(i5 == i6);
boolean bool1 = i5 > i6;
System.out.println(bool1);
System.out.println(i5 != i6);
System.out.println(i5 >= i6);
boolean bool2 = true;
boolean bool3 = false;
System.out.println(bool2 && bool3);// 与,前后都要成立
System.out.println(bool2 || bool3);// 或,前后有一个成立
System.out.println(!bool2);//非,取反
System.out.println(bool2 & bool3);
System.out.println(bool2 | bool3);
int i7 = 8;
int i8 = 6;
//System.out.println((i7 += 1) > i8 && i7 < (i8 += 6));// true
//System.out.println(i7);// 9
//System.out.println(i8);// 12
// 短路||
//System.out.println((i7 += 1) > i8 || i7 < (i8 += 6));// true
//System.out.println(i7);// 9
//System.out.println(i8);// 6
// 短路&&
//System.out.println((i7 += 1) < i8 && i7 < (i8 += 6));// false
//System.out.println(i7);// 9
//System.out.println(i8);// 6
// 按位&
System.out.println((i7 += 1) < i8 & i7 < (i8 += 6));// false
System.out.println(i7);// 9
System.out.println(i8);// 12
int i9 = 6;
int i10 = 8;
int i11 = i9 > i10 ? i9 : i10;
System.out.println(i11);
//位运算符:左移和右移
int a = 16;
//16 -> 10000
//10000 << 1 = 100000
//100000 -> 32
System.out.println(a << 1);// 32 = 16 * 2^1
System.out.println(a << 2);// 64 = 16 * 2^2
System.out.println(a << 3);// 128 = 16 * 2^3
System.out.println(a >> 2);// 4 = 16 / 2^2
总结
数据类型的转换需要熟记由小到大的过程,从大转成小的数据类型会出现精度的丢失所以需要强制类型的转化,数据之间的运算与正常的数学运算类似