Skip to content

C 语言入门(三)

前言

最近事有点多啊,忙着项目和考研。尤其是项目,喵的两天找 BUG,都是 SQL 缺逗号!!!😤

三、运算符

今天来点简单的😊

3.1 算术运算符

C 语言的算术运算符

就是数学符号啦!😉

运算符描述
+加法
-减法
*乘法
/整除
%取模(整除后的余数)mod
++自增运算(整数值增加 1)
--自减运算(整数值减少 1)
c
int var =0;
var = var + 3;
printf("%d\n",var); // 3
var = var - 2;
printf("%d\n",var); // 1
var = var * 1;
printf("%d\n",var); // 1
var = var / 1;
printf("%d\n",var); // 1
var = var % 1;
printf("%d\n",var); // 0
var++; // 等价于 var=var+1;
++var; // 等价于 var=var+1;
printf("%d\n",var); // 1
var--; // 等价于 var=var-1;
--var; // 等价于 var=var-1;
printf("%d\n",var); // 0

这里主要注意一下 “整除”。

  1. 整数除法的结果是整数:当两个整数相除时,结果也是整数。如果想要得到小数部分,需要至少一个操作数是浮点数。
  2. 除数不能为0:在C语言中,除数不能为0。如果尝试对一个数进行0作为除数的除法操作,会导致运行时错误。
  3. 向零取整:在C语言中,整数除法通常是向零取整的,即结果会被截断为最接近0的整数。
c
int var =5;
var = var / 2;
printf("%d\n",var); // 2

var = var / 0;
printf("%d\n",var); // 出错

int var1 = -5;
var1 = -5 / 2;
printf("%d\n",var1); // -2

递增递减运算符

可能算一种语法糖?🤔

在 C 语言编译器中,递增递减运算符通常会进行优化,使其在生成的机器代码中效率更高。

c
int var = 5;

// 后缀递增操作符
int result1 = var++;  // 先使用 var 的值(result1 = 5),然后将 var 加1
printf("%d\n", var);  // var 变成了 6
printf("%d\n", result1);  // result1 是之前的 var 的值,即 5

var = 5;  // 重置 var 的值为 5

// 前缀递增操作符
int result2 = ++var;  // 先将 var 加1,然后使用新的 var 的值(result2 = 6)
printf("%d\n", var);  // var 变成了 6
printf("%d\n", result2);  // result2 是新的 var 的值,即 6

3.2 关系运算符

就是比较符号啦😶

注意

几乎所有的流行编程语言中,== 是相等符号,而=是赋值符号。

运算符描述
==相等
!=不等
>大于
<小于
>=大于等于
<=小于等于

3.3 逻辑运算符

且或非,高中学过嘛🧐

运算符描述
&&逻辑与运算符。全真为真。
||逻辑或运算符。全假为假。
!逻辑非运算符。若真则假。

3.4 位运算符

位运算符作用于位,并逐位执行操作。

位运算主要是二进制位运算,有机会讲讲。(又挖坑了🤔)

运算符描述说明
&与运算符当两个二进制位都为1,返回1
|或运算符两个二进制位只要有一个为1,就返回1
^逻辑非运算符两个二进制位有且仅有一个为1,就返回1
取反运算符对每个二进制位取反
<<左移运算符左侧运算数的每一位,向左移动指定的位数,尾部空出来的位置使用0填充。
>>右移运算符左侧运算数的每一位,向右移动指定的位数,尾部无法容纳的值将丢弃,头部空出来的位置使用0填充。

3.5 赋值运算符

简化了赋值运算表达,会用就行😶

运算符描述实例
=赋值运算符C = A + B 将把 A + B 的值赋给 C
+=加且赋值运算符C += A 相当于 C = C + A
-=减且赋值运算符C -= A 相当于 C = C - A
*=乘且赋值运算符C *= A 相当于 C = C * A
/=除且赋值运算符C /= A 相当于 C = C / A
%=求模且赋值运算符C %= A 相当于 C = C % A
<<=左移且赋值运算符C <<= 2 等同于 C = C << 2
>>=右移且赋值运算符C >>= 2 等同于 C = C >> 2
&=按位与且赋值运算符C &= 2 等同于 C = C & 2
^=按位异或且赋值运算符C ^= 2 等同于 C = C ^ 2
|=按位或且赋值运算符C |= 2 等同于 C = C | 2

3.6 其他运算符

运算符描述实例
&取地址运算符&a; 将给出变量的实际地址。
*取值运算符*a; 将指向一个变量。
? :条件运算符如果条件为真 ? 则值为 X : 否则值为 Y

条件运算符

条件运算符可以用来简化简单的if-else条件语句,但是并不建议替换复杂的if-else语句。因为可读性差和可维护性差。

c
int x = 10, y = 20;
int max = (x > y) ? x : y;
printf("较大的数是: %d\n", max);

3.7 运算符优先级

数学运算也有优先级和这个差不多,看看得了,不用记😶

运算符的优先级确定表达式中项的组合。这会影响到一个表达式如何计算。优先级从高到低。

类别运算符结合性
后缀() [] -> . ++ - -从左到右
一元+ - ! ~ ++ - - (type)* & sizeof从右到左
乘除* / %从左到右
加减+ -从左到右
移位<< >>从左到右
关系< <= > >=从左到右
相等== !=从左到右
位与 AND&从左到右
位异或 XOR^从左到右
位或 OR|从左到右
逻辑与 AND&&从左到右
逻辑或 OR||从左到右
条件?:从右到左
赋值= += -= *= /= %=>>= <<= &= ^= |=从右到左
逗号,从左到右

写在最后

说实话,数学和编程很相似,都是对思维的一种抽象,只不过数学是高级抽象。🤔

这篇大多都是有关数学的符号,其实计算机被创造出来的目的就是“计算”,而如今计算机发展之上的编程语言也逃脱不了被“算计”的命运。(开玩笑😋)

如有转载或 CV 请标注本站原文地址