在C++中的运算符主要分为以下六大类:
注:整型除法也是整型,小数除法是小数,除数不能为0
- 取模运算:“%”;
注:取模运算,求余数,除数不能为0
- 自加、自减运算符(*)
(1)前置
int b1 = ++a1 * 10;
++a:前置递增,先进行自加1,再代入表达式进行计算,等价于如下指令(前置自减同理):
a1 = a1 + 1;int b1 = a1 * 10;
(2)后置
int b2 = a2++ * 10;
a++:后置递增,先将原始值带入表达式运算,再进行自加,然后执行下一条指令,等价于如下指令(后置自减同理):
int b2 = a2 * 10;a2 = a2 + 1;
(二)赋值运算符
普通赋值:“=”;
a = 100; //给变量a赋值为100
复合赋值:“+=”,“-=”,“*=”,“/=”,“%=”; ```cpp a = 10; a += 10; //等价于a = a + 10;
//运算结果为20 //“-=”,“*=”,“/=”,“%=” 同理
<a name="fPaOa"></a>## (三)比较运算符```cpp// == 相等判别cout << (a == b) << endl;// != 不相等cout << (a != b) << endl;// <= 小于等于cout << (a <= b) << endl;// >= 大于等于cout << (a >= b) << endl;// > 大于cout << (a > b) << endl;// < 小于cout << (a < b) << endl;
(四)逻辑运算符
逻辑非:“!”;
cout << !a << endl; //取反,真的反为假,假的反为真cout << !!a << endl;
逻辑于:“&&”;
cout << (b && c) << endl; //同时为真,结果为真
逻辑或:“||”;
cout << (b || c) << endl; //其中一个为真,即为真
(五)位运算符
位运算符作用于位,并逐位执行操作。
(1)“&”:按位与操作,按二进制位进行”与”运算。
(2)“|”:按位或运算符,按二进制位进行”或”运算。
(3)“^”:异或运算符,按二进制位进行”异或”运算。运算规则:
(4)“~”:取反运算符,按二进制位进行”取反”运算。运算规则:unsigned int a = 60; // 60 = 0011 1100unsigned int b = 13; // 13 = 0000 1101c = a & b; // 12 = 0000 1100cout << "Line 1 - c 的值是 " << c << endl ;c = a | b; // 61 = 0011 1101cout << "Line 2 - c 的值是 " << c << endl ;c = a ^ b; // 49 = 0011 0001cout << "Line 3 - c 的值是 " << c << endl ;c = ~a; // -61 = 1100 0011cout << "Line 4 - c 的值是 " << c << endl ;
(5)“<<”:二进制左移运算符。将数的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。
(6)“>>”:二进制右移运算符。将数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。int c = 0;c = a << 2; // 240 = 1111 0000cout << "Line 5 - c 的值是 " << c << endl ;c = a >> 2; // 15 = 0000 1111cout << "Line 6 - c 的值是 " << c << endl ;
(六)杂项运算符
在C++中还给出了一些其他的运算符,详情如下:
| 运算符 | 描述 |
|---|---|
| sizeof | sizeof 运算符返回变量的大小。例如,sizeof(int) 将返回 4。 |
| Condition ? X : Y | 条件运算符。如果 Condition 为真 ? 则值为 X : 否则值为 Y。 |
| , | 逗号运算符顺序执行一系列运算。逗号表达式的值是以逗号分隔的最后一个表达式的值。 |
| “.”和“->” | 成员运算符用于引用类、结构和共用体的成员。 |
| (Type) | 强制转换运算符把一种数据类型转换为另一种数据类型。如,int(2.2000) 将返回 2。 |
| & | 指针运算符 & 返回变量的地址。例如 &a; 将给出变量的实际地址。 |
| * | 指针运算符 * 指向一个变量。例如,*var; 将指向变量 var。 |
int a = 1;//sizeofcout << sizeof(int) << endl; //代码等价cout << sizeof(a) << endl;//运行结果//4//4//condition?X:Yint b = 0;int c = (a > b) ? a : b; //将a和b中较大的值赋给ccout << c << endl;//运行结果//1
二、运算符优先级
运算符的优先级确定表达式中项的组合。这会影响到一个表达式如何计算。某些运算符比其他运算符有更高的优先级,例如,乘除运算符具有比加减运算符更高的优先级。
下表将按运算符优先级从高到低列出各个运算符:
| 优先级 | 运算符 | 说明 | 结合性 |
|---|---|---|---|
| 1 | :: | 范围解析 | 自左向右 |
| 2 | ++ — | 后缀自增/后缀自减 | |
| () | 括号 | ||
| [] | 数组下标 | ||
| . | 成员选择(对象) | ||
| −> | 成员选择(指针) | ||
| 3 | ++ — | 前缀自增/前缀自减 | 自右向左 |
| + − | 加/减 | ||
| ! ~ | 逻辑非/按位取反 | ||
| (type) | 强制类型转换 | ||
| * | 取指针指向的值 | ||
| & | 某某的地址 | ||
| sizeof | 某某的大小 | ||
| new, new[] | 动态内存分配/动态数组内存分配 | ||
| delete, delete[] | 动态内存释放/动态数组内存释放 | ||
| 4 | . -> | 成员对象选择/成员指针选择 | 自左向右 |
| 5 | * / % | 乘法/除法/取余 | |
| 6 | + − | 加号/减号 | |
| 7 | << >> | 位左移/位右移 | |
| 8 | < <= | 小于/小于等于 | |
| > >= | 大于/大于等于 | ||
| 9 | == != | 等于/不等于 | |
| 10 | & | 按位与 | |
| 11 | ^ | 按位异或 | |
| 12 | | | 按位或 | |
| 13 | && | 与运算 | |
| 14 | || | 或运算 | |
| 15 | ?: | 三目运算符 | 自右向左 |
| 16 | = | 赋值 | |
| += −= | 相加后赋值/相减后赋值 | ||
| *= /= %= | 相乘后赋值/相除后赋值/取余后赋值 | ||
| <<= >>= | 位左移赋值/位右移赋值 | ||
| &= ^= |= | 位与运算后赋值/位异或运算后赋值/位或运算后赋值 | ||
| 17 | throw | 抛出异常 | |
| 18 | , | 逗号 | 自左向右 |
int a = 20;int b = 10;int c = 15;int d = 5;int e;e = (a + b) * c / d; // ( 30 * 15 ) / 5cout << "(a + b) * c / d 的值是 " << e << endl ;e = ((a + b) * c) / d; // (30 * 15 ) / 5cout << "((a + b) * c) / d 的值是 " << e << endl ;e = (a + b) * (c / d); // (30) * (15/5)cout << "(a + b) * (c / d) 的值是 " << e << endl ;e = a + (b * c) / d; // 20 + (150/5)cout << "a + (b * c) / d 的值是 " << e << endl ;
运行结果:
(a + b) * c / d 的值是 90((a + b) * c) / d 的值是 90(a + b) * (c / d) 的值是 90a + (b * c) / d 的值是 50
菜鸟教程:https://m.runoob.com/cplusplus/cpp-operators.html
END
