C 运算符
C 运算符
算术运算符 (Arithmetic operators)
算术运算符用于执行常见的数学运算。
| Operator | Name | Description | Example |
|---|---|---|---|
| + | 加 Addition | 将两个值相加 | x + y |
| - | 减 Subtraction | 从另一个值中减去一个值 | x - y |
| * | 乘 Multiplication | 将两个值相乘 | x * y |
| / | 除 Division | 将一个值除以另一个 | x / y |
| % | 取模 Modulus | 返回除法余数 | x % y |
| ++ | 增量 Increment | 将变量的值增加 1 | ++x |
| — | 乘量 Decrement | 将变量的值减 1 | —x |
赋值运算符 (Assignment operators)
赋值运算符用于为变量赋值。
在下面的示例中,我们使用 赋值 运算符 (=) 将值 10 分配给名为 x 的变量:
1
int x = 10;
加法赋值运算符 (+=) 将值添加到变量:
1
2
int x = 10;
x += 5;
所有赋值运算符的列表:
| 符号 | 示例 | 如同 |
|---|---|---|
| = | x = 5 | x = 5 |
| += | x += 3 | x = x + 3 |
| -= | x -= 3 | x = x - 3 |
| *= | x *= 3 | x = x * 3 |
| /= | x /= 3 | x = x / 3 |
| %= | x %= 3 | x = x % 3 |
| &= | x &= 3 | x = x & 3 |
| |= | x |= 3 | x = x | 3 |
| ^= | x ^= 3 | x = x ^ 3 |
| »= | x »= 3 | x = x » 3 |
| «= | x «= 3 | x = x « 3 |
比较运算符 (Comparison operators)
比较运算符用于比较两个值。
比较的返回值为 true (
1) 或 false (0)。
在以下示例中,我们使用 大于 运算符 (>) 来确定 5 是否大于 3:
1
2
3
int x = 5;
int y = 3;
printf("%d", x > y); // 返回 1(真),因为 5 大于 3
所有比较运算符的列表:
| 符号 | 名称 | 示例 |
|---|---|---|
| == | 等于 | x == y |
| != | 不等于 | x != y |
| > | 大于 | x > y |
| < | 小于 | x < y |
| >= | 大于或等于 | x >= y |
| <= | 小于或等于 | x <= y |
逻辑运算符 (Logical operators)
逻辑运算符用于确定变量或值之间的逻辑:
| 符号 | 名称 | 说明 | 示例 |
|---|---|---|---|
| && | 与逻辑 | 如果两个语句都为真,则返回真 | x < 5 && x < 10 |
| || | 或逻辑 | 如果其中一个语句为真,则返回真 | x < 5 || x < 4 |
| ! | 非逻辑 | 反转结果,如果结果为真则返回假 | !(x < 5 && x < 10) |
位运算符 (Bitwise operators)
假设A=60,B=13
| 运算符 | 描述 | 实例 |
|---|---|---|
& | 按位与操作,按二进制位进行”与”运算 | (A & B) 将得到 12 即为 0000 1100 |
\| | 按位或运算符,按二进制位进行”或”运算 | (A \| B) 将得到 61 即为 0011 1101 |
^ | 异或运算符,按二进制位进行”异或”运算 | (A ^ B) 将得到 49 即为 0011 0001 |
~ | 取反运算符,按二进制位进行”取反”运算 | (~A) 将得到 -61 即为 1100 0011 |
<< | 二进制左移运算符 | A << 2 将得到 240 即为 1111 0000 |
>> | 二进制右移运算符 | A >> 2 将得到 15 即为 0000 1111 |
异或的主要用途在于加密和解密,例如
a = b ^ c,这时通过a和b,就可以解密出c:c = a ^ b
下面的实例,了解 C 语言中所有可用的位运算符
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
int main()
{
unsigned int a = 60; /* 60 = 0011 1100 */
unsigned int b = 13; /* 13 = 0000 1101 */
int c = 0;
c = a & b; /* 12 = 0000 1100 */
printf("Line 1 - c 的值是 %d\n", c );
c = a | b; /* 61 = 0011 1101 */
printf("Line 2 - c 的值是 %d\n", c );
c = a ^ b; /* 49 = 0011 0001 */
printf("Line 3 - c 的值是 %d\n", c );
c = ~a; /*-61 = 1100 0011 */
printf("Line 4 - c 的值是 %d\n", c );
c = a << 2; /* 240 = 1111 0000 */
printf("Line 5 - c 的值是 %d\n", c );
c = a >> 2; /* 15 = 0000 1111 */
printf("Line 6 - c 的值是 %d\n", c );
}
当上面的代码被编译和执行时,它会产生下列结果:
1
2
3
4
5
6
Line 1 - c 的值是 12
Line 2 - c 的值是 61
Line 3 - c 的值是 49
Line 4 - c 的值是 -61
Line 5 - c 的值是 240
Line 6 - c 的值是 15
sizeof 运算符
可以使用 sizeof 运算符找到数据类型或变量的内存大小(以字节为单位):
1
2
3
4
5
6
7
8
9
int myInt;
float myFloat;
double myDouble;
char myChar;
printf("%lu\n", sizeof(myInt));
printf("%lu\n", sizeof(myFloat));
printf("%lu\n", sizeof(myDouble));
printf("%lu\n", sizeof(myChar));
逗号运算符
逗号表达式的值是以逗号分隔的列表中的最后一个表达式的值。
从本质上讲,逗号的作用是导致一系列运算被顺序执行。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
int main()
{
int i, j;
j = 10;
i = (j++, j+100, 999+j);
cout << i;
return 0;
}
这段程序的运行结果是
1
1010
本文由作者按照 CC BY 4.0 进行授权