C++运算符优先级表,从上到下,从左到右,优先级依次减弱。
优先级 | 运算符 | 说明 | 结合性 |
---|---|---|---|
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 | , | 逗号 | 自左向右 |
一、算术运算符
下表显示了 C++ 支持的所有算术运算符。假设变量 A 的值为 10,变量 B 的值为 20,则:
运算符 | 描述 | 实例 |
---|---|---|
+ | 把两个操作数相加 | A+B将得到30 |
- | 从第一个操作数中减去第二个操作数 | A-B将得到-10 |
* | 把两个操作数相乘 | A*B将得到200 |
/ | 分子除以分母 | B/A将得到2 |
% | 取模运算符,整除后的余数 | B%A将得到0 |
++ | 自增运算符,整数值增加1 | A++将得到11 |
— | 自减运算符,整数值减少1 | A—将得到9 |
算术运算符实例:
请看下面的实例,了解 C++ 中所有可用的算术运算符,复制并黏贴下面的 C++ 程序到 test.cpp 文件中,编译并运行程序即可。
#include
using namespace std;
main()
{
int a = 21;
int b = 10;
int c ;
c = a + b;
cout << “Line 1 - c 的值是 “ << c << endl ;
c = a - b;
cout << “Line 2 - c 的值是 “ << c << endl ;
c = a * b;
cout << “Line 3 - c 的值是 “ << c << endl ;
c = a / b;
cout << “Line 4 - c 的值是 “ << c << endl ;
c = a % b;
cout << “Line 5 - c 的值是 “ << c << endl ;
c = a++;
cout << “Line 6 - c 的值是 “ << c << endl ;
c = a—;
cout << “Line 7 - c 的值是 “ << c << endl ;
return 0;
}
当上面的代码被编译和执行时,它会产生下列结果:
Line 1 - c 的值是 31
Line 2 - c 的值是 11
Line 3 - c 的值是 210
Line 4 - c 的值是 2
Line 5 - c 的值是 1
Line 6 - c 的值是 21
Line 7 - c 的值是 22
}
二、关系运算符
下表显示了 C++ 支持的所有关系运算符。同样还是假设变量 A 的值为 10,变量 B 的值为 20,则:
关系运算符实例:
请看下面的实例,了解 C++ 中所有可用的关系运算符,复制并黏贴下面的 C++ 程序到 test.cpp 文件中,编译并运行程序即可。
#include
using namespace std;
main()
{
int a = 21;
int b = 10;
int c ;
if( a == b )
{
cout << “Line 1 - a 等于 b” << endl ;
}
else
{
cout << “Line 1 - a 不等于 b” << endl ;
}
if ( a < b )
{
cout << “Line 2 - a 小于 b” << endl ;
}
else
{
cout << “Line 2 - a 不小于 b” << endl ;
}
if ( a > b )
{
cout << “Line 3 - a 大于 b” << endl ;
}
else
{
cout << “Line 3 - a 不大于 b” << endl ;
}
/ 改变 a 和 b 的值 /
a = 5;
b = 20;
if ( a <= b )
{
cout << “Line 4 - a 小于或等于 b” << endl ;
}
if ( b >= a )
{
cout << “Line 5 - b 大于或等于 b” << endl ;
}
return 0;
}
当上面的代码被编译和执行时,它会产生下列结果:
Line 1 - a 不等于 b
Line 2 - a 不小于 b
Line 3 - a 大于 b
Line 4 - a 小于或等于 b
Line 5 - b 大于或等于 b
三、逻辑运算符
下表显示了 C++ 支持的所有关系逻辑运算符。假设变量 A 的值为 1,变量 B 的值为 0,则:
逻辑运算符实例:
请看下面的实例,了解 C++ 中所有可用的逻辑运算符,复制并黏贴下面的 C++ 程序到 test.cpp 文件中,编译并运行程序即可。
#include
using namespace std;
main()
{
int a = 5;
int b = 20;
int c ;
if ( a && b )
{
cout << “Line 1 - 条件为真”<< endl ;
}
if ( a || b )
{
cout << “Line 2 - 条件为真”<< endl ;
}
/ 改变 a 和 b 的值 /
a = 0;
b = 10;
if ( a && b )
{
cout << “Line 3 - 条件为真”<< endl ;
}
else
{
cout << “Line 4 - 条件不为真”<< endl ;
}
if ( !(a && b) )
{
cout << “Line 5 - 条件为真”<< endl ;
}
return 0;
}
当上面的代码被编译和执行时,它会产生下列结果:
Line 1 - 条件为真
Line 2 - 条件为真
Line 3 - 条件不为真
Line 4 - 条件为真
四、位运算符
位运算符作用于位,并逐位执行操作。&、 | 和 ^ 的真值表如下所示:
p | q | p&q | p|q | p^q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
假设如果 A = 60,且 B = 13,现在以二进制格式表示,它们如下所示:
A = 0011 1100
B = 0000 1101
————————-
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
下表显示了 C++ 支持的位运算符。假设变量 A 的值为 60,变量 B 的值为 13,则:
运算符 | 描述 | 实例 |
---|---|---|
& | 如果同时存在于两个操作数中,二进制AND运算符复制一位到结果中。 | (A&B)将得到12,即为0000 1100 |
| | 如果存在于任一操作数中,二进制OR运算符复制一位到结果中。 | (A|B)将得到61,即为0011 1101 |
^ | 如果存在于其中一个操作数中但不同时存在于两个操作数中,二进制 异或运算符复制一位到结果中。 |
(A^B)将得到49,即为0011 0001 |
~ | 二进制补码运算符是一元运算符,具有”翻转”位效果。 | (~A)将得到-61,即为1100 0011,2的补码形式,带符号的二进制数。 |
<< | 二进制左移运算符。左操作数的值向左移动右操作数指定的位数。 | A<<2将得到240,即为1111 0000 |
>> | 二进制右移运算符。左操作数的值向右移动右操作数指定的位数。 | A>>2将得到15,即为0000 1111 |
运算符实例:
请看下面的实例,了解 C++ 中所有可用的逻辑运算符,复制并黏贴下面的 C++ 程序到 test.cpp 文件中,编译并运行程序即可。
#include
using namespace std;
main()
{
unsigned int a = 60; // 60 = 0011 1100
unsigned int b = 13; // 13 = 0000 1101
int c = 0;
c = a & b; // 12 = 0000 1100
cout << “Line 1 - c 的值是 “ << c << endl ;
c = a | b; // 61 = 0011 1101
cout << “Line 2 - c 的值是 “ << c << endl ;
c = a ^ b; // 49 = 0011 0001
cout << “Line 3 - c 的值是 “ << c << endl ;
c = ~a; // -61 = 1100 0011
cout << “Line 4 - c 的值是 “ << c << endl ;
c = a << 2; // 240 = 1111 0000
cout << “Line 5 - c 的值是 “ << c << endl ;
c = a >> 2; // 15 = 0000 1111
cout << “Line 6 - c 的值是 “ << c << endl ;
return 0;
}
当上面的代码被编译和执行时,它会产生下列结果:
Line 1 - c 的值是 12
Line 2 - c 的值是 61
Line 3 - c 的值是 49
Line 4 - c 的值是 -61
Line 5 - c 的值是 240
Line 6 - c 的值是 15
五、赋值运算符
下表列出了 C++ 支持的赋值运算符:
运算符 | 描述 | 实例 |
---|---|---|
= | 简单的赋值运算符,把右边操作数的值赋给左边操作数 | C=A+B将把A+B的值赋给C |
+= | 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数 | C+=A相当于C=C+A |
-= | 减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数 | C-=A相当于C=C-A |
*= | 乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数 | C_=A相当于C=C_A |
/= | 除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数 | C/=A相当于C=C/A |
%= | 求模且赋值运算符,求两个操作数的模赋值给左边操作数 | C%=A相当于C=C%A |
<<= | 左移且赋值运算符 | C<<=2等同于C=C<<2 |
>>= | 右移且赋值运算符 | C>>=2等同于C=C>>2 |
&= | 按位与且赋值运算符 | C&=2等同于C=C&2 |
^= | 按位异或且赋值运算符 | C^=2等同于C=C^2 |
|= | 按位或且赋值运算符 | C|=2等同于C=C|2 |
赋值运算符实例:
请看下面的实例,了解 C++ 中所有可用的赋值运算符,复制并黏贴下面的 C++ 程序到 test.cpp 文件中,编译并运行程序即可。
#include
using namespace std;
main()
{
int a = 21;
int c ;
c = a;
cout << “Line 1 - = 运算符实例,c 的值 = : “ <
c += a;
cout << “Line 2 - += 运算符实例,c 的值 = : “ <
c -= a;
cout << “Line 3 - -= 运算符实例,c 的值 = : “ <
c = a;
cout << “Line 4 - = 运算符实例,c 的值 = : “ <
c /= a;
cout << “Line 5 - /= 运算符实例,c 的值 = : “ <
c = 200;
c %= a;
cout << “Line 6 - %= 运算符实例,c 的值 = : “ <
c <<= 2;
cout << “Line 7 - <<= 运算符实例,c 的值 = : “ <
c >>= 2;
cout << “Line 8 - >>= 运算符实例,c 的值 = : “ <
c &= 2;
cout << “Line 9 - &= 运算符实例,c 的值 = : “ <
c ^= 2;
cout << “Line 10 - ^= 运算符实例,c 的值 = : “ <
c |= 2;
cout << “Line 11 - |= 运算符实例,c 的值 = : “ <
return 0;
}
当上面的代码被编译和执行时,它会产生下列结果:
Line 1 - = 运算符实例,c 的值 = 21
Line 2 - += 运算符实例,c 的值 = 42
Line 3 - -= 运算符实例,c 的值 = 21
Line 4 - *= 运算符实例,c 的值 = 441
Line 5 - /= 运算符实例,c 的值 = 21
Line 6 - %= 运算符实例,c 的值 = 11
Line 7 - <<= 运算符实例,c 的值 = 44
Line 8 - >>= 运算符实例,c 的值 = 11
Line 9 - &= 运算符实例,c 的值 = 2
Line 10 - ^= 运算符实例,c 的值 = 0
Line 11 - |= 运算符实例,c 的值 = 2
六、杂项运算符
下表列出了 C++ 支持的其他一些重要的杂项运算符。
杂项运算符实例:
请看下面的实例,了解 C++ 中运算符的优先级,复制并黏贴下面的 C++ 程序到 test.cpp 文件中,编译并运行程序即可。
对比有括号和没有括号时的区别,这将产生不同的结果。因为 ()、 /、 和 + 有不同的优先级,高优先级的操作符将优先计算。
#include
using namespace std;
main()
{
int a = 20;
int b = 10;
int c = 15;
int d = 5;
int e;
e = (a + b)
cout << “(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); // (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 ;
return 0;
}
当上面的代码被编译和执行时,它会产生下列结果:
(a + b) c / d 的值是 90
((a + b) c) / d 的值是 90
(a + b) (c / d) 的值是 90
a + (b c) / d 的值是 50
学习编程,请到:http://www.fatanxi.com/training/index.htm
关注公众号“编程天地”,进一步了解如何学习编程语言: