运算符包括:赋值运算符、算术运算符、关系运算符、逻辑运算符、位运算符、条件运算符(三元运算符)
一、赋值运算符
变量=表达式
例:height = 198.6
x = a+b;
a=b=c=8;
二、算术运算符
加法运算符:+ 双目运算符,如:a+b
减法运算符:- 既是双目又是单目运算符,如:-7,9-7
乘法运算符:* 双目运算符
除法运算符:/ 参与运算量若都为整型,那么结果也是整型(取整向0的方向)。-5/3==-1
如果其中有一个实型,则结果为双精度。
除数不能为0,否则会发生中断。
模运算符:% 双目运算符。7%3==1
三、关系运算符
> < >= <= == !=
例1:若b在a、c之间,则...
if(a>b>c) //这个表达是错误的。
then ...
注:上述表达式错误的。a>b>c 先执行a>b:如果a>b,则结果为1;否则结果为0。再用c与0(1)比较。
例2:
printf("%d",5>0); //结果为:1。5>0为真。
四、逻辑运算符
逻辑与:&& A&&B 如果A为真,才会看B。如果A为假,则不看B。
逻辑或:|| A||B 如果A为A,则不看B。如果A为假,才会看B。
逻辑非:!
例1:
#include <stdio.h>
int main(){
int a=2,b=3,c;
c=a>0 || ++b>0; //先执行逻辑表达式(a>0||++b>0),然后再执行赋值语句。对于逻辑表达式。由于a>0为真,所以不执行++b>0。
printf("%d,%d\n",b,c); //b=3,c=1
return 0;
}
结果:
3,1
例2:
#include <stdio.h>
int main(){
int a=-2,b=-3,c;
c=a>0 || ++b>0; //先执行逻辑表达式(a>0||++b>0),然后再执行赋值语句。对于逻辑表达式。由于a>0为假,所以执行++b>0。b加1得-2,小于零,为假。
printf("%d,%d\n",b,c); //b=-2,c=0
return 0;
}
结果:
-2,0
8.1写出下列程序的运行结果(与或)
#include<iostream.h>
void main()
{
int x=2,y,z;
x*=(y=z=5);cout<<x<<endl; y=5 x=2*5=10 10
z=3;
x==(y=z);cout<<x<<endl; y=3 x=10
x=(y==z);cout<<x<<endl; y=3 z=3 y==z 1 x=1
x=(y&z);cout<<x<<endl;
x=(y&&z);cout<<x<<endl;
y=4;
x=(y|z);cout<<x<<endl;
x=(y||z);cout<<x<<endl;
}
结果:10 10 1 3 1 7 1
8.2 与或非问题
用一个表达式,判断一个数X是否为2N次方(2,4,8,16,…),不可用循环语句。
答案:!(X&(X-1))
解释:2N次方为:10,100,1000,10000,…分别减1之后为:1,11,111,1111,…与原来的数相与结果为0。
8.3 编写代码,求出数m的二进制数中1的个数。
#include<iostream.h>
void main()
{
int count=0;
int m=9999;
while(m)
{
count++;
m=m&(m-1);
}
cout<<count<<endl;
}
五、位运算符
按位与:& 0&0=0 0&1=0 1&0=0 1&1=1
作用1:对二进制清零(复位)。想要对一个数某些位清零,其他位不变,则只需设计一个数,使它符合以下条件:需要清零的对应位其值为0,而不变的对应位为1。然后二者进行按位与运算。
作用2:提取一个数中的某些位。如果要取出某些位,则只需设计一个数,使它符合以下条件:需要取出的位的对应位位1,其他位的对应位为0。然后二者进行按位与运算。
例1:22&0
解:22=00010110
00010110
& 00000000
00000000
例2:0x16 & 0x0f
解:0x16=00010110 0x0f=00001111
00010110
& 00001111
00000110
按位或:|
作用:
按位异或:^
一个数与本身异或得0。
一个数与0异或得本身。
按位取反:~
左移:<< 扩大一倍(*2) 左移有可能溢出。
右移:>> 缩小一倍(/2)
六、条件运算符(三元运算符)
max=a>b?a:b //如果a>b,则max=a;否则max=b
自增
a+=1 //即,a=a+1
a++ //即,a自增1
例:
#include <stdio.h>
int main(){
int a=1;
printf("%d\n",a++); //1
printf("%d\n",a); //2
a=1;
printf("%d\n",++a); //2
printf("%d\n",a); //2
return 0;
}