外观
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
这里主要注意一下 “整除”。
- 整数除法的结果是整数:当两个整数相除时,结果也是整数。如果想要得到小数部分,需要至少一个操作数是浮点数。
- 除数不能为0:在C语言中,除数不能为0。如果尝试对一个数进行0作为除数的除法操作,会导致运行时错误。
- 向零取整:在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 | || | 从左到右 |
条件 | ?: | 从右到左 |
赋值 | = += -= *= /= %=>>= <<= &= ^= |= | 从右到左 |
逗号 | , | 从左到右 |
写在最后
说实话,数学和编程很相似,都是对思维的一种抽象,只不过数学是高级抽象。🤔
这篇大多都是有关数学的符号,其实计算机被创造出来的目的就是“计算”,而如今计算机发展之上的编程语言也逃脱不了被“算计”的命运。(开玩笑😋)