龙空技术网

C语言学习之运算符与表达式

Antonov 22

前言:

而今姐妹们对“c语言后面加”大约比较关切,同学们都想要剖析一些“c语言后面加”的相关内容。那么小编同时在网络上搜集了一些对于“c语言后面加””的相关资讯,希望小伙伴们能喜欢,朋友们一起来学习一下吧!

运算符和表达式

1、基本的概念

运算符: 也可以叫做操作赋 就是一种执行运算的特定符号

ex: + - * /

操作数:就指指定运算符 运算的数据

ex: 1 + 2 中的 1 2 都是操作数

表达式: 由操作数与运算符组成的能够计算唯一结果的式子叫做表达式

这个唯一的结果叫做表达式的值!

ex: 2+1=3;

2+1 就是一个表达式 这个表达式的值就是3

C语言中的运算符 按照功能分分为以下几种:

算术运算符

赋值运算符

关系运算符

逻辑运算符

位运算符

条件运算符

逗号运算符

其他运算符

C语言中按照操作数的个数分类 分为以下几种:

单目运算符 即只有1个操作数

双目运算符 即只能有2个操作数

三目运算符 即只有3个操作数 C语言中唯一有一个就是条件运算符

2、算术运算符

2.1 双目运算符

+ - * / % 结合性从左到右

ex: 1+2+3-6 从左往右算 就是结合性!

注意: 两个不同类型的数据进行运算 结果是大的那个数据类型

整型 与 整型 运算 结果依然是整型

整型 与 浮点 运算 结果是浮点型

浮点 与 整型 运算 结果是浮点型

浮点 与 浮点 运算 结果是浮点型

如果 short 和 char 运算 结果是 short

*** 无符号的范围大于有符号的范围

无符号整型 与 有符号整型运算 结果 是无符号的

ex: int a = 10;

char c =5;

a+c的结果为15 类型为 int

int a = 10;

long l = 20;

a + l => long long比int大 但是 32位机没区别 64位就有

/ 对于整数运算而言 不是除 叫做求商

ex: 3/2 结果位 1 商为 1

对于浮点数据运算而言 就是除

ex: 3/2 结果为 1.500000

% 比较特殊 其两个操作数 必须都是整数

ex: 3%2 结果为1 因为是商1 余1 这里取的是 余数

—————不开辟空间 交换a = 5,b =6;的值 ( + - * ^ 都可,/不行)

int a=5,b=6; int a=5,b=6;

a = a+b; //a = 11,b = 6 a = a-b; //a = -1, b = 6

b = a-b; //b = 5, a = 11 b = a+b; //a = -1, b = 5

a = a-b; //a = 6, b = 5 a = b-a; //a = 6, b = 5

char a = 5,b = 6; int a=5,b=6;

a = a^b; //a = 3, b= 6; a = a*b; //a = 30,b = 6

b = a^b; //a = 3,b = 5; b = a/b; //a = 30,b = 5

a = a^b; //a = 6,b = 5; a = a/b; //a = 6, b = 5

练习:请输入一个3位数 将这个三位数的 个 十 百位分别取出 并倒置输出

ex: 输入: 123 输出: 321

int num;

scanf("%d",&num);

int ge,shi,bai;

ge = num/1%10;

shi= num/10%10;

bai = num/100%10

printf("%d%d%d\n",ge,shi,bai);

2.2 单目运算符

++ --

注意:使用++ -- 运算符的使用其操作数只能是变量 不能是常量

ex: int a = 10;

a++; =>相当于 a = a+1;

2++; => 相当于 2 = 2 +1 ; 2是常量值不可以更改

区别:后缀:i++,i-- 都是先引用再运算

前缀:++i,--i 都是先运算后引用

练习: int x = 2;

int y =(x++)+(++x)+(x++)-(x++)

x 3 4 5 6

表达式 2 + 4 + 4 - 5

求y的值 5

3、赋值运算符

包括 = += -= /= *= %= 都是双目运算符 结合性从右往左

练习: int c = 2;

int a,b;

a = b = 10%c=6; //表达式不对,先做10%c结果为0,0是一个常量不能被赋值

说明 优先级: 算术优先级 > 赋值

4、关系运算符 用于判断两个数据之间的关系的 均为双目运算符 结合性从左到右

> < == != >= <=

ex: int a = 5>3; //a = 1

因为关系运算符就相当于条件 成立则其真值为 1 否则真值为 0

那则有一个重要的点: 在C语言中 !0 即为真 只有0才为假

5、逻辑运算符 即求条件的真值 逻辑只有两个值 要么成立 用1 要么不成立用 0

5.1、单目运算符

只有一个 ! 非

相当于 逻辑反 即如果条件为真 取非 变为 假 !1 结果为 0

如果条件变为假 取非 变为 真 !0 结果为 1

5.2、双目运算符

&& ||

&& 逻辑与:只有当两个同为真才能为真

|| 逻辑或:只要有一个为真则为真 同为假才能为假

ex: 输入一个年份判断这个年份是不是闰年

能够被4整除 但不能 100整除 或者 能够被400整除

year%4==0 && year%100!=0 || year%400==0 //结合成立才为闰年

优先级: !> 算术 > 关系 > && > || >赋值

关于优先级 没必要死记硬背 不知道就加() 即可

/**********************/

惰性运算:(注意:惰性运算 高于一切

即在程序的执行过程中

&& 前面的表达式为假了 整个表达式都会为假 后面的就不做了

前面的为假 后面的就不做了

|| 前面的表达式为真了 表示已经有一个为真了 则后面的就不做了

前面的为真 后面的就不做 了

6、二进制的位运算

6.1 单目运算符

~ 按位取反

6.2 双目运算符 (包括 & | ^ << >>

& 按位& 遵守规则 0与任何数都得0 1与任何数都得任何数

| 按位| 遵守规则 1或任何数都得1 0或任何数都得任何数

^ 按位异或 即相同为 0不同为 1

<< 按位整体左移:高位移出则丢弃 低位补0(左移一位在没有溢出的情况下相当于*2

>> 按位整体右移 低位移出则丢弃 高位遵守以下规则

逻辑右移:不考虑符号位 即对于无符号数据而言 高位统一默认补0 低位丢弃

算术右移:需要考虑符号位 即对于有符号数据而言 高位补符号位 低位丢弃

ex: char c = 128;

c = c >> 2;

1000 0000 >>2

10 0000 00

--空缺 -- 移出

高位补符号位 而之前的的符号位为1

1110 0000

符号位为1 表示为 - 所以是补码

-1 1101 1111

~ 0010 0000 =》2^5 = 32 =》-32

7、逗号运算符 是一个双目运算符 结合性 从左到右

格式:

表达式1,表达式2,表达式3,.....,表达式n;

求解的过程:先求解表达式1 再求解表达式 2 ...

整个逗号表达式的值 就是最后一个表达式的值

ex: int f = (2,6,9); 对的 这是一个赋值表达式

这个赋值表达式 的值为 (2,6,9)这个逗号表达式的值!

8、条件运算符:

C语言中唯一的一个三目运算符 类似于:if else 的结构

格式:

表达式1?表达式2:表达式3;

语义:如果表达式1的值为真 则求解表达式2的值 此时整个条件表达式的值为表达式2的值

如果表达式1的值为假 则求解表达式3的值 此时整个条件表达式的值为表达式3的值

9、其他运算符: 部分仅作为了解

9.1 指针运算符 并且都是单目运算符

* 指向 & 取址

9.2 求数据类型的大小运算符 sizeof( ) ***

ex: sizeof(97) = 4

int a; sizeof(a) = 4

9.3 类型强转运算符

格式: (类型说明符)变量 or (类型说明符)常量

注意: 类型强转只能转值 不能转变量的类型

ex:

float f = 2.25;

int c = (int)f;

结果是 c = 2;

但是f的值没有变讲表达式引用的值的类型转了 但是数据并不改变

9.4 分量运算符

. 用于结构体 or 共用体成员的访问

-> 用于结构体 or 共用体成员的访问

9.5 下标运算符

[] 用于数组下标

/*********************************************************

表达式:做什么运算就是什么表达式

关系运算

a>b 这个表达式叫做 关系表达式

最后的运算做什么整个就叫做什么表达式 (哪个运算符优先级最低就是什么表达式

x = a > b && b < c; // 最后做赋值 所以 叫做赋值表达式

x = (2,3,5); //这是赋值表达式

a=2,c=6; //逗号表达式

所有合法的表达式都有 一个指定的值 这个值叫做 表达式的值!

************************************************************/

标签: #c语言后面加 #c语言中与运算符号相同 #c语言中的表达式和语句的关系是什么 #c语言求123 #c语言求每位数字之和