Skip to content

Latest commit

 

History

History
178 lines (133 loc) · 5.21 KB

c_operators.md

File metadata and controls

178 lines (133 loc) · 5.21 KB

C 运算符 Operators

运算符

运算符用于对变量和值执行操作。

在下面的示例中,我们使用 + 运算符 将两个值相加:

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 运算符

可以使用 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));