1.算数运算符:+,-,*,/,%,++,--
1/2=0(均为int ) 1.0/2=0.5(double/bit=double) 1/2.0=0.5(int/double=double)
res=res+(int)pow(1,2)//pow为double型
10/3=3 10%3=1 7%3=1
前置++与后置++
1)单独使用时 a++ a=a+1 a+=1 三者等加
2)与其他运算符结合
int a=0;
int b=a++;先取a,再赋值,后加1
int b=++a;先取a,再+1,后赋值
例:
int a=0;
int b=a++;//a=1,b=0
b=++a;//b=2,a=2
b=a--;//a=1,b=2
--a;//a=0
a++;//a=1
b=a++;//a=2,b=1
2.关系运算符:
> < <= >= == != bool(比较结果)
3.赋值运算符:
= +=
4.逻辑运算符:&& || !(与 或 非)
a=0;
if(a++==0&&++a==10)
{printf("%d",a);}
(注:&&为与运算符,a++==0已经为否,整个条件已经可以判断为否,后面的++a不运行,所以自增一次,a=1)
5.位运算符:&(按位与)|(按位或)^(异或) ~(取反) >>(右移符号) <<(左移符号)
1)& 按位与(判断奇偶——与1进行与运算)
num&0x1若等于0 则num为偶数,若等于1,则num为奇数;10&3=2
2)| 或运算
10|13=11,均化为二进制进行或运算
3)^ 异或(相同为0,不同为1),可用于a,b交换
a,b交换的两方式:
1)int a,b,c;
c=a;
a=b;
b=c;
2)int a=10,b=20;
a=a^b;
b=a^b;
a=a^b;//最终结果a,b的值互换
4)~ 取反
~-1=0 ~-2=1 ~-3=2 (取反与符号位无关)
5)6) >> << 左移右移
右移:num>>count 等价于num除以2的count次方 (10>>1=5)
左移:num<<count等价于num乘以2的count次方(10<<1=20)
(-1右移仍未-1)
6.三目运算符:··· ?···:···
int max=num1>num2?num1:num2;//若满足?之前的条件运行冒号之前语句,反之运行冒号之后语句
7)运算符优先级:
8)
(small+big)/2
long long[0,100]
long long small=50;
long long big=90;//两者相加超出范围
((big-small)>>1)+s;//(b-s)/2 +s