📜  C编程运算符(1)

📅  最后修改于: 2023-12-03 15:30:16.036000             🧑  作者: Mango

C 编程运算符

在 C 语言中,运算符用于对一个或多个操作数进行操作,以产生最终的结果。 C 语言中支持多种类型的运算符,包括算术运算符、关系运算符、逻辑运算符、位运算符等等。

算术运算符

算术运算符用于执行各种算术运算操作,包括加、减、乘、除、取模等。以下是一些常见的算术运算符:

| 运算符 | 描述 | | ------ | ----------------------------------------------------------- | | + | 相加,例如:A + B 将输出 A 和 B 求和的结果 | | - | 相减,例如:A - B 将输出 A 和 B 的差 | | * | 相乘,例如:A * B 将输出 A 和 B 的乘积 | | / | 相除,例如:A / B 将输出 A 和 B 的商 | | % | 取模,例如:A % B 将输出 A 和 B 的余数 | | ++ | 自增,例如:A++ 将 A 的值加一,等同于 A = A + 1 | | -- | 自减,例如:A-- 将 A 的值减一,等同于 A = A - 1 |

#include <stdio.h>

int main() {
  int a = 10;
  int b = 20;
  int c;

  c = a + b;
  printf("a + b = %d\n", c);

  c = a - b;
  printf("a - b = %d\n", c);

  c = a * b;
  printf("a * b = %d\n", c);

  c = a / b;
  printf("a / b = %d\n", c);

  c = a % b;
  printf("a %% b = %d\n", c);

  c = a++;
  printf("a++ = %d\n", c);

  c = b--;
  printf("b-- = %d\n", c);

  return 0;
}

输出:

a + b = 30
a - b = -10
a * b = 200
a / b = 0
a % b = 10
a++ = 10
b-- = 20
关系运算符

关系运算符用于判断两个操作符之间的关系,例如大于、小于、等于等。以下是 C 语言中的一些关系运算符:

| 运算符 | 描述 | | ------ | ------------------------ | | == | 判断两个操作数是否相等 | | != | 判断两个操作数是否不相等 | | > | 判断左侧操作数是否大于 | | < | 判断左侧操作数是否小于 | | >= | 判断左侧操作数是否大于等于 | | <= | 判断左侧操作数是否小于等于 |

#include <stdio.h>

int main() {
  int a = 10;
  int b = 20;

  if (a == b) {
    printf("a 等于 b\n");
  }
  if (a != b) {
    printf("a 不等于 b\n");
  }
  if (a > b) {
    printf("a 大于 b\n");
  }
  if (a < b) {
    printf("a 小于 b\n");
  }
  if (a >= b) {
    printf("a 大于等于 b\n");
  }
  if (a <= b) {
    printf("a 小于等于 b\n");
  }

  return 0;
}

输出:

a 不等于 b
a 小于 b
a 小于等于 b
逻辑运算符

逻辑运算符用于组合两个或多个关系表达式,以产生更为复杂的表达式或语句。以下是 C 语言中的一些逻辑运算符:

| 运算符 | 描述 | | ------ | ------------------------------------------------------------ | | && | 逻辑 AND 运算符。当且仅当两个操作数都非零时,结果才为真。 | | || | 逻辑 OR 运算符。如果任何一个操作数非零,则结果为真。 | | ! | 逻辑 NOT 运算符。用于取反操作数的逻辑值。如果条件为真,则逻辑 NOT 运算符将使其为假。 |

#include <stdio.h>

int main() {
  int a = 10;
  int b = 20;
  int c = 0;

  if (a && b) {
    printf("a 和 b 都为真\n");
  }
  if (a || b) {
    printf("a 和 b 有一个为真\n");
  }
  if (!(a && b)) {
    printf("a 和 b 都为假\n");
  }
  if (!c) {
    printf("c 为真\n");
  }

  return 0;
}

输出:

a 和 b 都为真
a 和 b 有一个为真
a 和 b 都为假
c 为真
位运算符

位运算符将表达式中的操作数视为二进制数,然后进行位操作,例如左移、右移、位与、位或等。以下是 C 语言中的一些位运算符:

| 运算符 | 描述 | | ------ | ------------------------------------------------------------ | | & | 按位与。如果两个操作数都是 1,则结果为 1。否则,结果为 0。 | | | | 按位或。如果两个操作数中有一个是 1,则结果为 1。否则,结果为 0。 | | ^ | 按位异或。如果两个操作数中只有一个是 1,则结果为 1。否则,结果为 0。 | | ~ | 按位取反。按位取反运算符是一元运算符,用于翻转操作数中的每个位。 | | << | 左移运算符。左边的操作数向左移动右边的操作数指定的位数。 | | >> | 右移运算符。左边的操作数向右移动右边的操作数指定的位数。 |

#include <stdio.h>

int main() {
  unsigned int a = 60;    // 60 = 0011 1100
  unsigned int b = 13;    // 13 = 0000 1101
  int c;

  c = a & b;              // 12 = 0000 1100
  printf("a & b = %d\n", c);

  c = a | b;              // 61 = 0011 1101
  printf("a | b = %d\n", c);

  c = a ^ b;              // 49 = 0011 0001
  printf("a ^ b = %d\n", c);

  c = ~a;                 // -61 = 1100 0011
  printf("~a = %d\n", c);

  c = a << 2;             // 240 = 1111 0000
  printf("a << 2 = %d\n", c);

  c = a >> 2;             // 15 = 0000 1111
  printf("a >> 2  = %d\n", c);

  return 0;
}

输出:

a & b = 12
a | b = 61
a ^ b = 49
~a = -61
a << 2 = 240
a >> 2  = 15
其他运算符

除了上述运算符之外,C 语言还有一些其他的运算符,如下所示:

| 运算符 | 描述 | | ---------- | ---------------------------------------------------------------------------- | | sizeof | 用于获取数据类型或变量的长度(以字节为单位) | | & | 用于获取变量的地址 | | * | 用于指针变量中获取地址中存储的值 | | ?: | 三元运算符,用于简单的条件语句。它通常作为 if...else 语句的简洁替代品。 | | = | 赋值运算符。用于将右边表达式的值赋值给左边的操作数。 | | +=、-=、*= | 变量的赋值运算符(加、减、乘) | | /=、%= | 变量的赋值运算符(除、取模) | | <<=、>>= | 变量的赋值运算符(左移、右移) | | &=、^=、|= | 变量的赋值运算符(按位与、按位异或、按位或) | | , | 逗号运算符。该运算符使得多个表达式能够用单个语句进行处理,并根据顺序返回最后一个值。 |

#include <stdio.h>

int main () {
   int a = 4;
   short b;
   double c;
   int* ptr;
   int arr[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

   printf("Line 1 - 变量 a 的大小 = %lu\n", sizeof(a));
   printf("Line 2 - 变量 b 的大小 = %lu\n", sizeof(b));
   printf("Line 3 - 变量 c 的大小 = %lu\n", sizeof(c));

   ptr = arr;

   for (int i = 0; i < 5; i++) {
      printf("arr[%d] = %d\n", i, *(ptr + i));
   }

   return 0;
}

输出:

Line 1 - 变量 a 的大小 = 4
Line 2 - 变量 b 的大小 = 2
Line 3 - 变量 c 的大小 = 8
arr[0] = 0
arr[1] = 1
arr[2] = 2
arr[3] = 3
arr[4] = 4