Java学习笔记3——Java运算符的难点及注意事项

一、算术运算符

1.%

取余,取余的实质是a % b = a - a / b * b,总结规律,取余得到的数值符号与被除数相同

若a为小数,a % b = a - (int) a / b * b

温馨提示:a % b,a是被除数

-10 % 3; // -1
10 % -3; // 1
-10 % -3; // -1

2.++/--

自增符,a++和++a的区别:

a = 3;
b = a++;// 等价于b = a;a = a + 1;因此b = 3,a = 4
c = ++a;// 等价于a = a + 1;c = a;因此c = 4,a = 4

3.逻辑运算符

&(逻辑与)与&&(短路与):

在原理上没有区别,在运行中,若第一个条件为false,&&不再判断第二个逻辑运算,&要再做一次判断。因此在实际使用中用&&,效率更高。

|(逻辑或)与 ||(短路或)同理

4.异或

^ :当两个条件为一真一假时,则取真,反之取假。

5.赋值运算符

一些小细节:复合复制运算会发生类型转换

byte a = 2;
a ++;//等价于a = a + 1,但执行指令a = a + 1无法通过编译,因为1为int型,因此其实质为a = (byte) (a + 1)
a += 2;//等价于a = a + 2,但执行指令a = a + 2无法通过编译,因为2为int型,因此其实质为a = (byte) (a + 2)

6.位运算符

2&3 &按位与,同为1时取1,否则取0

因为&两侧为整型,同时在java中,不认为非零整数为真,所以在这种情况下为按位运算。

以2&3为例,运算规则为首先得到2和3的二进制补码,其次进行按位与的运算,得到结果的补码,计算得到原码,为运算结果。

~2 ~按位取反

>>算数右移:低位溢出,溢出的位置以符号位数值补充。其运算实质相当于除以2,移动几位便除几次

<<算数左移:低位补零,高位溢出但符号位不变。其运算实质相当于乘2,移动几位便乘几次

>>>无符号右移/逻辑右移:低位溢出高位补0

首先要介绍进制相关的信息:

二进制:以0b或0B开头表示

八进制:以0开头表示

十六进制:以0x或0X开头表示

进制转换:

1、其他进制转十进制:

0b001101   为1*2的0次方+0*2的1次方+1*2的2次方+1*2的3次方+0*2的4次方+0*2的5次方

其余同理

2、十进制转其他进制:

如转换为二进制,除二取余,除至所得商比进制小,商+余数倒叙排列即为结果

其余同理

3、二进制转八进制:

从低位起,每三位转换为对应的数值

4、二进制转十六进制:

从低位起,每四位转换为对应的数值

5、八进制转二进制:

从低位起,每一位转换为三位二进制

6、十二进制转二进制:

从低位起,每一位转换为四位二进制

原码、补码、反码:

原码,第一位为符号位,0表示正数,1表示负数

反码:正数的反码与原码相同,负数的反码:符号位不变,其余按位取反

补码:正数的补码与原码相同,负数的补码为反码+1

0的反码、补码均为0

注意:计算机在运算时使用补码,但是看结果时是看原码

你可能感兴趣的:(学习,java)