c基础语法03

c基础语法03

1. 算术运算符

1. 算术运算符

C 语言通过提供大量的运算符来支持我们对数据进行处理,前边我们将一个值存放到变量中,使用的是赋值运算符,就是等于号(=),上节课对字符串中的某个字符进行索引,使用方括号([])作为下标运算符实现。

这一节我们谈的是 C 语言中最常用的运算符——算数运算符。

img

这里有几点要跟大家说一下:

  • 因为键盘上没有乘号和除号两个按键,所以用星号(*)和斜杠(/)代替,这几乎是潜规则了。
  • 对于整数间的除法是采取直接舍弃小数部分的方式,而不是什么四舍五入噢。
  • 对于浮点数间的除法则能获得一个相对逼近结果的值(如果除不尽或位数特别多的话)。
  • 百分号(%)在这里是表示求余数的意思,但求余运算符要求两边的操作数都要是整数,其结果也是整数。

2. 何谓“目”?

大家可能看到有些运算符后边写双目,有些写单目,那么什么是目呢?

我们把被运算符作用的运算对象称之为操作数,比如 1 + 2,那么 1 和 2 就是被加法运算符(+)作用的两个操作数。我们说一个运算符是双目运算符还是单目运算符,就是看它有多少个操作数。

3. 表达式

用运算符和括号将操作数连接起来的式子,我们称之为表达式。

  • 1 + 1
  • 'a' + 'b'
  • a + b
  • a + 'b' + pow(a, b) * 3 / 4 + 5

4. 运算符的优先级和结合性

注1:优先级相同的运算符,运算次序由结合性决定。

  • 比如 3 * 4 / 5 % 6,其中乘号、除号和求余运算符在同一优先级,结合性是“左到右”,因此先计算 3 * 4,再计算 / 5,最后计算 % 6
  • 再如 -i++,符号和自增运算符在同一优先级,结合性是“右到左”,因此 -i++ 相当于 -(i++)

注2: 目运算符是指操作数的个数,比如单目运算符只有一个操作数,双目运算符有两个操作数,而三目运算符则有三个操作数。*

注3:通过使用小括号可以提升表达式的优先级至最高。

  • 比如 (1 + 2) * (3 - 4),其中加号、减号运算符的优先级本身是要低于乘号运算符的,但由于使用了小括号,且结合性均是“左到右”,所以先计算 (1 + 2),再计算 (3 - 4),最后才将前两者的结果相乘
#include <stdio.h>
#include <math.h>
int main()
{
int i,j,k;
i= 1+2;
j= 1+2*3;
k= i + j + -1 + pow(2,3);
printf("i=%d\n",i);//3
printf("j=%d\n",j);//7
printf("k=%d\n",k);//17
return 0;
}
优先级 运算符 含义 使用形式 **结合性 ** 说明
1 [ ] 数组下标 数组名[整型表达式] 左到右 →
( ) 圆括号 (表达式)
. 成员选择(对象) 对象.成员名
-> 成员选择(指针) 对象指针->成员名
++ 自增运算符 变量名++ 单目运算符
-- 自减运算符 变量名-- 单目运算符
2 - 负号运算符 -表达式 右到左← 单目运算符
(类型) 强制类型转换 (数据类型)表达式 单目运算符
++ 自增运算符 ++变量名 单目运算符
-- 自减运算符 --变量名 单目运算符
* 取值运算符 *指针表达式 单目运算符
& 取地址运算符 &左值表达式 单目运算符
! 逻辑非运算符 !表达式 单目运算符
~ 按位取反运算符 ~表达式 单目运算符
sizeof 长度运算符 sizeof 表达式或sizeof(类型) 单目运算符
3 / 表达式 / 表达式 左到右→ 双目运算符
* 表达式 * 表达式 双目运算符
% 余数(取模) 整型表达式 % 整型表达式 双目运算符
4 + 表达式 + 表达式 左到右→ 双目运算符
- 表达式 - 表达式 双目运算符
5 << 左移 表达式 << 表达式 左到右→ 双目运算符
>> 右移 表达式 >> 表达式 双目运算符
6 > 大于 表达式 > 表达式 左到右→ 双目运算符
>= 大于等于 表达式 >= 表达式 双目运算符
< 小于 表达式 < 表达式 双目运算符
<= 小于等于 表达式 <= 表达式 双目运算符
7 == 等于 表达式 == 表达式 左到右→ 双目运算符
!= 不等于 表达式 != 表达式 双目运算符
8 & 按位与 整型表达式 & 整型表达式 左到右→ 双目运算符
9 ^ 按位异或 整型表达式 ^ 整型表达式 左到右→ 双目运算符
10 | 按位或 整型表达式 | 整型表达式 左到右 → 双目运算符
11 && 逻辑与 表达式 && 表达式 左到右 → 双目运算符
12 || 逻辑或 表达式 || 表达式 左到右 → 双目运算符
13 ?: 条件运算符 表达式1? 表达式2: 表达式3 右到左 ← 三目运算符
14 = 赋值运算符 变量 = 表达式 右到左 ← 双目运算符
/= 除后赋值 变量 /= 表达式 双目运算符
*= 乘后赋值 变量 *= 表达式 双目运算符
%= 取模后赋值 变量 %= 表达式 双目运算符
+= 加后赋值 变量 += 表达式 双目运算符
-= 减后赋值 变量 -= 表达式 双目运算符
<<= 左移后赋值 变量 <<= 表达式 双目运算符
>>= 右移后赋值 变量 >>= 表达式 双目运算符
&= 按位与后赋值 变量 &= 表达式 双目运算符
^= 按位异或后赋值 变量 ^= 表达式 双目运算符
|= 按位或后赋值 变量 |= 表达式 双目运算符
15 , 逗号运算符 表达式1,表达式2,表达式3,… 左到右 →

5. 类型转换

当一个运算符的几个操作数类型不同时,编译器需要将它们转换为共同的某种数据类型,才能进行运算。

#include <stdio.h>
int main()
{
printf("整型输出:%d\n",1+2.0);//0
printf("浮点型输出:%f\n",1+2.0);//3.000000
return 0;
}

通常情况下,编译器会将占用坑位比较小的操作数,先转换为与坑位较大的操作数的相同类型,然后再进行运算。这样做的目的就是为了确保计算的精确度。

除了编译器帮你自动转换不同类型的操作数之外,C 语言还允许你强制转换操作数的数据类型。做法就是在操作数的前边用小括号将目标数据类型括起来。

#include <stdio.h>
int main()
{
printf("整型输出:%d\n",1+(int)2.0);//整型输出:3
printf("浮点型输出:%f\n",1+2.0);//浮点型输出:3.000000
printf("整型输出:%d\n",1+(int)1.8);//整型输出:2
printf("整型输出:%d\n",1+(int)0.8);//整型输出:1
return 0;
}

2. 关系运算符和逻辑运算符

1. 关系运算符

在 C 语言中,使用关系运算符来比较两个数的大小关系。

img

关系运算符都是双目运算符,其结合性均为左到右。另外,关系运算符的优先级低于算术运算符,高于赋值运算符。
2. 关系表达式

用关系运算符将两边的变量、数据或表达式连接起来,称之为关系表达式:

  • 1 < 2 // 1
  • a > b // 看具体变量
  • a <= 1 + b // 看具体变量
  • 'a' + 'b' <= 'c' //97+98 <= 99 ----->0
  • (a = 3) > (b = 5) // 0

关系表达式得到的值是一个逻辑值,即判断结果为“真”或“假”,如果结果为“真”,关系表达式的值为 1,如果为“假”,关系表达式的值则为 0。

#include <stdio.h>
int main()
{
int a = 5,b = 3;
printf("%d\n",1<2);
printf("%d\n",a>b);
printf("%d\n",a<=b+1);
printf("%d\n",'a'+'b'<='c');
printf("%d\n",(a=3)>(b=5));
// 1
// 1
// 0
// 0
// 0
return 0;
}

3. 逻辑运算符

C 语言总共提供了三种逻辑运算符:

img
4. 逻辑表达式

用逻辑运算符将两边的变量、数据或表达式连接起来,称之为逻辑表达式:

  • 3 > 1 && 1 < 2
  • 3 + 1 || 2 == 0
  • !(a + b)
  • !0 + 1 < 1 || !(3 + 4)
  • 'a' - 'b' && 'c'

注:关系表达式和逻辑表达式得到的值都是一个逻辑值,也就是表示真的 1 和表示假的 0。但是用于判断一个值是否为真时,以 0 表示假,以任何非 0 的数表示真。一个是编译系统告诉我们的结果,一个是我们让编译系统去判断的,两者方向不同。

#include <stdio.h>
int main()
{
int a = 5,b = 3;
printf("%d\n",3 > 1 && 1 < 2);
printf("%d\n",3 + 1 || 2 == 0);
printf("%d\n",!(a + b));
printf("%d\n",!0 + 1 < 1 || !(3 + 4));
printf("%d\n",'a' - 'b' && 'c');
// 1
// 1
// 0
// 0
// 1
return 0;
}

5. 短路求值

短路求值又称最小化求值,是一种逻辑运算符的求值策略。只有当第一个运算数的值无法确定逻辑运算的结果时,才对第二个运算数进行求值。

C 语言对于逻辑与和逻辑或采用短路求值的方式。

#include <stdio.h>
int main()
{
int a = 3, b = 3;
int i = 0, j = 0,m = 0,n = 0,l = 0;
i=(a = 0) && (b = 5);
printf("%d\n",i);
printf("a = %d, b = %d\n", a, b);
j=(a = 1) && (b = 5);
printf("%d\n",j);
printf("a = %d, b = %d\n", a, b);
m=(a = 2) || (b = 6);
printf("%d\n",m);
printf("a = %d, b = %d\n", a, b);
l=(a = 0) || (b = 6);
printf("%d\n",l);
printf("a = %d, b = %d\n", a, b);
n=(a = 0) || (b = 0);
printf("%d\n",n);
printf("a = %d, b = %d\n", a, b);
return 0;
}

posted @   tantao0_0  阅读(201)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示