运算符用于对变量和值执行操作。
在下面的示例中,我们使用 +
运算符 将两个值相加:
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 将运算符分为以下几组:
- 算术运算符 (Arithmetic operators)
- 赋值运算符 (Assignment operators)
- 比较运算符 (Comparison operators)
- 逻辑运算符 (Logical operators)
- 位运算符 (Bitwise 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 |
赋值运算符用于为变量赋值。
在下面的示例中,我们使用 赋值 运算符 (=
) 将值 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));