1. 运算符
(1)算数运算符
- 一元运算符︰++、–
- 二元运算符:+、-、*、1、%
- 自增、自减运算符
后置++:先运算再++;
前置++:先++再运算。
eg:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int num1,num2=2;
num1=0;
cout<<"前置++\n";
cout<<num1++<<endl;
cout<<num1<<endl;
num1=0;
cout<<"后置++\n";
cout<<++num1<<endl;
cout<<num1<<endl;
return 0;
}
输出:
前置++
0
1
后置++
1
1
eg2:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int num1,num2=2;
num1= num2++ - --num2;
cout << num1 <<"\t" << num2 <<endl;
return 0;
}
输出:
0 2
num2先–再++,所以输出值是2;
num1=0:因为表达式先计算前置一元运算符,在计算二元运算符,最后计算后置一元运算符。
即:先计算–num2,num2就为1,在计算 num2 - num2=0,即num1就是0,最后在计算num2++,num2就是2。
(2)赋值运算符
- 单等号
计算顺序:从右向左
num+=90; //等价于 num=num+90;
(3)关系运算符
-
>、 <
-
>=、 <=
-
==、!=
c语言中,0表示假,非0表示真。
cout<<"1<0?\t"<<(1<0)<<endl;
cout<<"1>0?\t"<<(1>0)<<endl;
输出:
1<0? 0
1>0? 1
c++中引入布尔类型bool:只有true和false
#include <iostream>
using namespace std;
int main()
{
cout<<boolalpha;
cout<<"1<0?\t"<<(1<0)<<endl;
cout<<"1>0?\t"<<(1>0)<<endl;
return 0;
}
输出:
1<0? false
1>0? true
(3)逻辑运算符
运算符 | 表达式 | 说明 |
---|---|---|
与 (&&) | 条件1&&条件2 | 两个条件同时为真时,结果为真 |
或 | 条件1 或 条件2 | 两个条件有一个为真时,结果为真 |
非(!) | !条件 | 条件为真时,结果为假;条件为假时,结果为真 |
或:符号是 || .
(4) 位运算符
名称 | 作用 |
---|---|
&按位与 | 两个操作数同时为1结果为1 |
按位或 | 两个操作数只要有一个为1,结果就为1 |
~ 按位非 | 按位取反 |
^ 按位异或 | 两个操作数相同,结果为0;不相同结果为1 |
<<左移 | 右侧空位补0 |
>>右移 | 左侧空位补0 |
位:bit
(5)sizeof()
- sizeof()是一个运算符,不是函数!!
作用:sizeof():可以计算出变量或类型所占字节大小:
#include <iostream>
using namespace std;
int main()
{
int a;
cout<<sizeof(int)<<endl;
cout<<sizeof(a)<<endl;
return 0;
}
输出:
4
4
例子:
#include <iostream>
using namespace std;
int main()
{
int num=5;
cout<<"numSize="<<sizeof(num++)<<endl;
cout<<"num="<<num<<endl;
return 0;
}
输出:
numSize=4
num=5
这里num为什么是5,而不是6能?
由于sizeof()的原因,sizeof只计算括号内变量的大小,而对于括号内变量的运算一概不管,所以num就不会执行++操作。
运算符优先级
单目运算符(!、~、++、–、sizeof())> 算术运算符 > 关系运算符 > && > || > 赋值运算符
2.表达式
符号与操作数的集合。
3.类型转换
(1)自动类型转换
原则︰把表示范围小的类型的值转换到表示范围大的类型的值short -> int -> long -> float -> double
#include <iostream>
using namespace std;
int main()
{
int num1=5,num2=2;
double num3=num1/num2;
cout << num3 <<endl;
return 0;
}
输出
2
此时num3是double类型的
(2)强制类型转换
可以小转大,也可以大转小
语法∶(类型名)变量或数值
小转大:
#include <iostream>
using namespace std;
int main()
{
int num1=5,num2=2;
double num3=(double)num1/num2;
cout << num3 <<endl;
return 0;
}
输出:
2.5