运算符用于对变量和值执行操作。
在下面的示例中,我们使用 + 运算符 将两个值相加:
int myNum = 100 + 50;
尽管 + 运算符经常用于将两个值相加,就像上面的示例一样,它也可以用于将一个变量和一个值相加,或者一个变量和另一个变量相加:
int sum1 = 100 + 50; // 150 (100 + 50)
int sum2 = sum1 + 250; // 400 (150 + 250)
int sum3 = sum2 + sum2; // 800 (400 + 400)
C 将运算符分为以下几组:
算术运算符用于执行常见的数学运算。
| 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 |
赋值运算符用于为变量赋值。
在下面的示例中,我们使用 赋值 运算符 (=) 将值 10 分配给名为 x 的变量:
int x = 10;
加法赋值运算符 (+=) 将值添加到变量:
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 |
比较运算符用于比较两个值。
注意: 比较的返回值为 true (1) 或 false (0)。
在以下示例中,我们使用 大于 运算符 (>) 来确定 5 是否大于 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 |
逻辑运算符用于确定变量或值之间的逻辑:
| 符号 | 名称 | 说明 | 示例 |
|---|---|---|---|
| && | 与逻辑 | 如果两个语句都为真,则返回真 | x < 5 && x < 10 |
| || | 或逻辑 | 如果其中一个语句为真,则返回真 | x < 5 || x < 4 |
| ! | 非逻辑 | 反转结果,如果结果为真则返回假 | !(x < 5 && x < 10) |
| 运算符 | 描述 | 实例 |
|---|---|---|
& |
按位与操作,按二进制位进行"与"运算 | (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 |
下面的实例,了解 C 语言中所有可用的位运算符
#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 );
}
当上面的代码被编译和执行时,它会产生下列结果:
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 运算符找到数据类型或变量的内存大小(以字节为单位):
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));