3、运算符、表达式
1、%求余数
3%2=1 4%2=0 4.0%2=0.0 1%2=1 -1%2=-1 1%-2=1 -1%-2=-1 17.1%4=1.1
分子小于分母,数值为分子,符号按分子走。
1%0->by zero 1.0%0=NAN not a number
2、a=2;b=++a; 那么a=3;b=3;
a=2;b=a++; 那么a=2; b=3;
int a=2;
int b=a+3*a++; 计算机从左往右看,第一个a就是2
则a=3,b=8
3、比较运算符
==相等,要求两边都是基本数据类型
===全等,两边类型数字都等才返回true 比较的是栈中的东西,想比较堆中的,用equals
4、位运算符
正数二进制变负数二进制=正数的首位0变成1,其他为是0变成1,1变成0,再在末尾加1,注意进位
负数二进制变正数二进制= 正数的首位1变成0,末尾减1,其他0变1,1变0
a、 ~取反 01001111 ——>10110000 ~0b0011——>-4 因为还得考虑第一位是符号位
~0b0000--0011 得 先取反11 111100,可以看出是负数,先把符号定下来,然后数字部分用上面的法则11111100减1,变成11111011,然后再01互换,得00000100,数字部分为4,加上前面的负号为-,所以为-4。(方法:可以让正数先变负,再减1,就可以了)
b、&按位与 2&3=2
c、^按位异或 2^3=1(同1,0为0)
d、|按位或 2|3=3(同0为0)
5、移位运算符
>>右移:把第一个操作数的二进制码右移指定个位数 64>>2=16 31>>2=7 (正数可以相当于除法)
-2>>2 0000 0010---1111 1101---1111 1110>>2=1111 1111(负数1补位)---1111 1110---0000 0001,结果为1
>>左移:同上,全部0补位(乘法)
>>>无符号右移:他把第一个操作数的二进制码右移指定位数后,左边空出来的位总是以0补充。
6、逻辑运算符
&和&&的区别:前者是与,后者为短路与
|和||同理
7、赋值运算符
short sum=100;
sum+=100;//不检查类型匹配,正确,性能高不安全
sum=sum+100;//检查类型匹配,错误,性能低安全
8、局部变量特点是:在使用前必须初始化!!!!
9、三目运算符
必须赋值给一个变量!
100>90?"真":"假"; 错了
必须string a=100>90?"真":"假";