文章

C 运算符

C 运算符

算术运算符 (Arithmetic operators)

算术运算符用于执行常见的数学运算。

OperatorNameDescriptionExample
+加 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 = 5x = 5
+=x += 3x = x + 3
-=x -= 3x = x - 3
*=x *= 3x = x * 3
/=x /= 3x = x / 3
%=x %= 3x = x % 3
&=x &= 3x = x & 3
|=x |= 3x = x | 3
^=x ^= 3x = x ^ 3
»=x »= 3x = x » 3
«=x «= 3x = 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 & 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 语言中所有可用的位运算符

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));
本文由作者按照 CC BY 4.0 进行授权