进制
- 十进制
- 二进制Binary:0b、0B开头;
- 八进制octal: 0开头
- 十六进制: 0x或者0X开头;
二进制表达式
- 一个字节,最高位是符号位:0标识正数,1表示负数;
- 计算机底层使用补码的方式进行存储(但是是靠着原码进行计算十进制);
- 正数的三码合一;负数并不是;
十进制转二进制,除2取余的逆;
补码有误
运算符
1、算数运算符;
java"> public static void main(String[] args) {String s1 = "123123";
// System.out.println(s1 - 1); //字符串不能和int类型直接进行运算;char c1 = 'a';String s2 = s1 + c1;System.out.println(s2); // "123123a"double d1 = 10;int d2 = 3;double d3 = d1 / d2;System.out.println(d3);}
- (1)、除法;
/; **除法的结果类型,需要看除数和被除数的类型;
java">int i1 = 2;int i2 = 3;double d1 = i1 / i2; //可以;System.out.println(d1);int i3 = i1 / i2;System.out.println(i3);//也可以;i++;和++i;在字节码中的没有区别;实际中只有先自增和后自增的区别;short s1 = 10;s1 = (short)(s1 + 1); //此处必须要强制转换;等同于s1++;s1++;
- (2)模: % ;取模的结果符号和除数的符号相同: 12 % -5 = 2; -12 %-5 = -2;
java">public static void main(String[] args) {short s1 = 10;s1 = (short)(s1 -1); //s1--;System.out.println(s1); s1--;System.out.println(s1); --s1;System.out.println(s1); // 取一个证书的个十百千位;int num = 123;int ge = num % 10;int s = num % 100 / 10;int b = num / 100;System.out.println(ge);System.out.println(s);System.out.println(b);// 89是多少天,多少时;int hour = 89;int day = hour / 24;int hou = 89 % 24;System.out.println(day);System.out.println(hou);// String str = "5+5=" + 5+5; //5+5=55;String s2 = "5+5=" + (5+5); //5+5=10;System.out.println(str);System.out.println(s2);byte b1 = 127;b1++;System.out.println(b1);//-128;int i5 = 1;int i6 = i5++ + ++i5 * i5++;// 1 + 3 X 3;System.out.println(i6); // 10;int m = 2;m = m++;System.out.println(m); //2//m = ?// m = 2;----int j = 2;j = ++j;System.out.println(j); //3}
2、赋值运算符
特例
java">public static void main(String[] args) {//连续赋值;int a,b;a = b = 10; // 其他方式;int a1 = 20,b1 = 30;/* += */byte bt = 10;bt += 5; //5虽然是int类型,但是没有报错;此种赋值方式不会改变数据类型;//如果写成 bt = bt + 5;会编译报错;System.out.println(bt); //15byte bt2 = 3;bt2 += bt;System.out.println(bt2); //18}
3、比较、关系运算符
- 比较运算符
java">== 、 > 、 != 、 >= 、 instanceof(面向对象,多态中使用);Boolean b1 = true > false; // 不能比较;(除==、=外布尔类型不能参与到其他七中基本类型的比较中)
java">public class Compare {public static void main(String[] args) {// boolean b0 = (true > false); // ܱȽϣboolean b1 = 2 > 1;System.out.println(b1);int i0 = 10;System.out.println(i0 = 20); //20;}
}
- 逻辑运算符
java">a&b 和 a&&b 结果一样;a|ba||b!aa^b 异或;(真假不一样时为真,只要不一样则为true)
4、逻辑运算符
-
& 逻辑与,
- 前false符号后面也都执行;
false & a++; //a会加一;
- 前false符号后面也都执行;
-
&& 短路与;
- 前false符号后面不会执行;
false & a++; //a不会加一;
- 前false符号后面不会执行;
5、位运算符
都是针对数值类型的变量或常量;
- 1、<<; 左移;
java">// 每左移一位 原有基础乘以2;
0-0-0-0 -- 0-0-0-0 -- 1-1-1-1;(2^3+2^2+2^1+2^0);0-0-0-0 -- 0-0-0-1 -- 1-1-1-0; 2*(2^3+2^2+2^1+2^0);
- 2、>>; 右移
- 正数高位补零,负数高位补一
- 每右移一位都除以2;
- 3、>>>;无符号右移
- 无论正负,高位补零-
- -负数瞬间变正
- 4、 &; 单与;
- 比较每一位
java"> //1和1为1;1和0为0;0和0为0;1 & 1; 1 & 0; 0 & 0;
- 5、 |; 单或;
- 比较每一位
java"> //0和0为0;1和1,1和0为1;1 | 1; 1 | 0; 0 | 0;
- 6、 ^; 异或;
- 两个不同为1, 相同为0;
- 7、 ~取反;
- 包括符号位全部取反;
6、条件运算符
一元,二元,三元运算符(条件运算符);
xx a = boolean ? 表达式1:表达式2;
表达式1和表达式2必须是同样的类型,或者可以相互转化(兼容)的类型;
比ifelse效率高一点点点点点
7、Lambda运算符
一元运算、二元运算、三元运算;(元指的是变量)
位运算应用,交换变量值
java"> public static void main(String[] args) {int num = 9;int num2 = (num << 200);System.out.println(num2);System.out.println(num);int num3 = (num >> 1);System.out.println(num3);// 交换变量的值;// 1、中间变量;// 2、先加到一起赋值给其中一个然后减去另一个;(只适用于数值类型、可能超出int范围)int m = 10,n = 20;m = m + n;n = m - n;m = m -n;// 3、位运算;异或;(只适用于数值类型)m = m ^ n;n = m ^ n;m = m ^ n;}
小结
计算金额,不适用float或者double;(精度不高);
使用bigDecimal;
boolean 变量分配空间时 占用一个槽位(slot)4个字节;
double、long占用两个槽位,其他的基本数据类型占据一个槽位;