假期没事,重温java,主要注重细节知识,下面是我个人做的笔记:
除法/的运算结果和运算对象的数据类型有关,两个数都是int,则商就是int,若商有小数,则截取小数部分;被除数和除数中只要有一个或两个都是浮点型数据,则商也是浮点型,不截取小数部分。
16/5 = =3 16/5.0 = =3.20000 -13/4 = =-4 -13/-3 = =4 3/5 = =0
取余%的运算符对象必须是整数,结果是整除后的余数,其余数的符号与被除数(%左边的数)相同。
13%3 = =1 13%-3 = =1 -13%3 = =-1
-13%23 = =-13 -13%-23 = =-13 3%5 = =3
规律:%中,若左边的数小于右边的数,则结果就为左边的数;若左边的数等于右边的数,则结果就为0;右边是1,结果为0
字符串数据和任何数据使用+都是相连接,最终都会变成字符串。
System.out.println("ab"+5+5); //ab55
System.out.println("ab"+(5+5)); //ab10
int a=4, b=5;
System.out.println(a+b); //9
System.out.println(a+","+b); // 4 , 5
System.out.println("a="+a+", b="+b); // a=4, b=5
转义字符:通过\来转变后面字母或者符号的含义。转义字符写在被转义字符的前面。
\n:换行 linux系统中,回车符由\n表示
\b:退格 相当于backspace键。
\r:按下回车键。 window系统中,回车符是由两个字符表示\n\r
\t:制表符。相当于Tab键
System.out.println("\"hello\""); //"hello"
System.out.println("\\hello\\"); //\hello\
char ch='n';//对的
char ch='\n'; // 对的,转换成回车符,是可以的
char ch='\'; //错的
char ch='\"'; //对的
char ch='\'';//对的
char ch='''; //错的
char ch='你'; //对 java中char是两个字节,一个汉字也是两个字节
int x=3; //右边的值赋值给左边
x+=4; //左右两边的和赋值给左边
short s=4;
s=s+5; //错的,两次运算,先做加法再做赋值, 丢失精度报错
s+=5; //对的,一次运算只做一次赋值运,它内部有一个自动转换动作
s = short(s+2); //错的
解析:
s = s + 5;
short short double
2B 2B 4B
先相加变成double 类型数据,再将其存储到short类型空间中,导致数据丢失精度所以报错(大的数据类型不能向小的数据类型自动转换)
逻辑运算符
true & true = true;
true & false = false;
false & true = false;
false & false = false;
& : 只要两边的boolean表达式结果,有一个为false,那么结果就是false
只有两边都为true,结果才为true。
true | true = true
true | false = true
false | true = true
false | false = false
|:两边只要有一个true,结果为true.
只有两边都为false,结果才为false
^:异或:相同为假(false),不同为真(true)
true ^ true = false
true ^ false = true
false ^ true = true
false ^ false = false
! 取反 真取反为为假,假取反为真
&时,左边无论真假,右边都进行运算
&&时,如果左边为真,右边参与运算;如果左边为假,那么右边不参与运算
|: 左边无论真假,右边都参与运算
||:左边为假,右边参与运算;左边为真,右边不参与运算
位移运算符
<< :左移 其实就是乘以2的移动的位数次幂
>>:右移 就是除以2的移动的位数次幂
例子:
3<<2 : 3左移两位,先把3换成二进制,整体左移两位,低位空位补0,被移除的高位丢弃
3 的二进制: 00000000 00000000 00000000 00000011
左移两位后: 00000000 00000000 00000000 0000001100
所以 3<<2=12
6>>2: 6右移两位,先把6换成二进制,整体右移两位,若被移位的二进制最高位是0,右移后,高位空缺位补0;若被移位的二进制最高位是1,高位空缺位补1,被移除的低位丢弃。
6的二进制: 00000000 00000000 00000000 00000110
右移两位后: 00000000 00000000 00000000 0000000110
所以 6>>2 = 1
6的反码: 11111111 11111111 11111111 11111001
6的补码(-6的二进制): 11111111 11111111 11111111 11111010
右移两位后: 11111111 11111111 11111111 1111111010
所以 -6>>2 =-2
结论:**这里适用于正数,负数,感兴趣的可以自己研究**
往左移,越移越大;往右移,越移越小
正数:原码=反码=补码
负数:反码=原码取反 ; 补码=反码+1 ; -> 补码=原码的反码+1
原码=补码的反码+1
负数以补码的形式存储在计算机中
3<<2=12; 3<<1=6; 3<<3=24;
3*4=12 3*2=6 3*8=24
3*2^2=12 3*2^1=6 3*2^3=8
往左移,移几位就是乘以2的几次方,这里只验证了正数,负数还未验证
6>>2=1 6>>1=3
6/2^2=1 6/2^1=3;
往右移,移几位就是除以2的几次方,这里只验证了正数,负数还未验证
注意:
6>>2=1 -6>>2 =-2 6>>1=3 -6>>1=-3
6/2^2=1 -6/2^2=-1 6/2^1=3 -6/2^1=-3
从这个例子可以看出,负数位移并不全部满足上述的规律。