IE盒子

搜索
查看: 148|回复: 0

C语言入门阶段04:C语言运算符和表达式

[复制链接]

7

主题

10

帖子

24

积分

新手上路

Rank: 1

积分
24
发表于 2023-4-7 01:52:39 | 显示全部楼层 |阅读模式
嗨喽,大家好,我是程序猿老王,程序猿老王就是我。
        今天给大家讲一讲C语言运算符和表达式。
        C语言运算符和表达式用于执行计算和操作,是编程中重要的基本组成部分。
一、背景

        C语言的设计者在设计语言时考虑了程序员的需求,因此C语言的运算符和表达式非常灵活,可以用于不同类型的操作。C语言提供了多种类型的运算符,例如算术运算符、关系运算符、逻辑运算符、位运算符等。这些运算符可以用于执行不同类型的操作,例如基本的数学运算、逻辑运算、位运算等。
二、运算符

·算术运算符

算术运算符用于执行基本的数学运算
运算符描述举例
+加法运算符a + b
-减法运算符a - b
*乘法运算符a * b
/除法运算符(取商)a / b
%取模运算符(取余)a % b
举例:
int a = 10;
int b = 5;
int c;

c = a + b; // c 等于 15
c = a - b; // c 等于 5
c = a * b; // c 等于 50
c = a / b; // c 等于 2
c = a % b; // c 等于 0需要注意的是,除数不能为 0,否则会出现运行时错误。
·关系运算符

关系运算符用于比较两个值之间的关系,返回真或假的结果
运算符描述举例
==如果两个值相等,则返回真a == b
!=如果两个值不相等,则返回真a != b
>如果左边的值大于右边的值,则返回真a > b
<如果左边的值小于右边的值,则返回真a < b
>=如果左边的值大于或等于右边的值,则返回真a >= b
<=如果左边的值小于或等于右边的值,则返回真a <= b
举例:
int a = 10;
int b = 5;
int c;

c = a == b; // c 等于 0,因为 a 不等于 b
c = a != b; // c 等于 1,因为 a 不等于 b
c = a > b;  // c 等于 1,因为 a 大于 b
c = a < b;  // c 等于 0,因为 a 小于 b
c = a >= b; // c 等于 1,因为 a 大于等于 b
c = a <= b; // c 等于 0,因为 a 小于等于 b·逻辑运算符

逻辑运算符用于连接两个或多个表达式,返回真或假的结果
运算符描述举例
&&逻辑与,如果两个表达式都为真,则返回真(表达式) && (表达式)
||逻辑或,如果两个表达式有一个或两个为真,则返回真(表达式) || (表达式)
!逻辑非,如果表达式的结果为假,则返回真!(表达式)
举例:
int a = 10;
int b = 5;
int c = 1;
int d = 0;

int result1 = (a > b) && (c == 1); // result1 等于 1,因为两个表达式都为真
int result2 = (a < b) && (c == 1); // result2 等于 0,因为第一个表达式为假
int result3 = (a < b) || (c == 1); // result3 等于 1,因为第二个表达式为真
int result4 = (a < b) || (d == 1); // result4 等于 0,因为两个表达式都为假
int result5 = !(a < b);            // result5 等于 1,因为表达式都为假,取反后为真
int result6 = !(a > b);            // result6 等于 0,因为表达式都为真,取反后为假·位运算符

位运算符用于对整数在二进制下的位进行操作
运算符描述举例
&按位与,如果两个数对应bit位都为1,则该bit位结果为1,否则为0a & b
|按位或,如果两个数对应bit位都为0,则该bit位结果为0,否则为1a | b
^按位异或,如果两个数对应bit位值不同,则该bit位结果为1,否则为0a ^ b
~取反,对每个bit位进行取反,0变1,1变0~a
<<左移,将左边的操作数向左移动指定的bit位数a << b
>>右移,将左边的操作数向右移动指定的bit位数a >> b
举例:
int a = 12;   // 二进制 1100
int b = 25;   // 二进制 11001
int c;

c = a & b;   // c 等于 8,因为二进制 1100 & 11001 = 1000
c = a | b;   // c 等于 29,因为二进制 1100 | 11001 = 11101
c = a ^ b;   // c 等于 21,因为二进制 1100 ^ 11001 = 10101
c = ~a;      // c 等于 -13,因为二进制 ~1100 = -1101
c = a << 2;  // c 等于 48,因为二进制 1100 左移 2 位后变为 110000
c = b >> 3;  // c 等于 3,因为二进制 11001 右移 3 位后变为 11需要注意的是,位运算符只能用于整型数据类型,而且左右两边的操作数必须是同样的数据类型。
·赋值运算符

赋值运算符用于将右边的值赋给左边的变量
运算符描述举例
=将右边的值赋给左边的变量a = b
+=将左右两边的值相加,再将结果赋给左边的变量a += b
-=将左边的值减去右边的值,再将结果赋给左边的变量a -= b
*=将左右两边的值相乘,再将结果赋给左边的变量a *= b
/=将左边的值除以右边的值,再将结果赋给左边的变量a /= b
%=将左边的值取余右边的值,再将结果赋给左边的变量a %= b
<<=将左边的值左移左边的值指定的bit位数,再将结果赋给左边的变量a <<= b
>>=将左边的值左移右边的值指定的bit位数,再将结果赋给左边的变量a >>= b
&=将左边的值按位与右边的值,再将结果赋给左边的变量a &= b
|=将左边的值按位或右边的值,再将结果赋给左边的变量a |= b
^=将左边的值按位异或右边的值,再将结果赋给左边的变量a ^= b
举例:
int a = 26;  //二进制 0001 1010
int b = 3;   //二进制 0000 0011

a = b;    //a=3,   直接将b的值赋给a
a += b;   //a=29,  a+b相加后的值,再赋给a
a -= b;   //a=23,  a-b相减后的值,再赋给a
a *= b;   //a=78, a*b相乘后的值,再赋给a
a /= b;   //a=8,  a/b相除后的商值,再赋给a
a %= b;   //a=2,  a/b相除后的余数,再赋给a
a <<= b;  //a=208,a(11010)左移b的值对应的数位为(11010000),再赋给a
a >>= b;  //a=3,   a(11010)右移b的值对应的数位为(11),再赋给a
a &= b;   //a=2,   a(0001 1010)和b(0000 0011)按位与后(0000 0010),再赋给a
a |= b;   //a=27,  a(0001 1010)和b(0000 0011)按位或后(0001 1011),再赋给a
a ^= b;   //a=25,  a(0001 1010)和b(0000 0011)按位异或后(0001 1001),再赋给a·条件运算符

条件运算符用于根据条件的真假来选择不同的操作
运算符描述举例
?:如果条件为真,则返回第一个值,否则返回第二个值(a > b) ? a : b
举例:
int a = 20;
int b = 10;

int max = (a > b) ? a : b; //max = 20, 条件(a > b)为真,因此将a的值赋给max
int min = (a < b) ? a : b; //max = 10, 条件(a < b)为假,因此将b的值赋给min·逗号运算符

逗号运算符用于分隔多个表达式,返回最后一个表达式的值
运算符描述举例
,将多个表达式组合起来,返回最后一个表达式的值a = 1, b = 2, c = 3
举例:
int a = 1, b = 2, c = 3;
int d = (a++, b++, c++, a + b + c);   // d = 9,因为 a、b、c 分别加 1,然后返回 a+b+c 的·sizeof 运算符

sizeof 运算符用于返回数据类型或变量的大小
运算符描述举例
sizeof返回数据类型或变量的大小sizeof(int)
举例:
int a = 5;
printf("sizeof(a) = %d\n", sizeof(a)); //a=4 a的数据类型为int,int为4字节·类型转换运算符

类型转换运算符用于将一个数据类型转换为另一个数据类型
运算符描述举例
(type)将一个值转换为指定的数据类型(float)a
举例:
int a = 5;
printf("(float)a = %f\n", (float)a); //结果为:5.000000, 将int类型的a转换为float类型三、表达式

        表达式是由运算符和操作数组成的式子,它可以计算出一个值。例如,a + b 就是一个表达式,它计算出 a 和 b 的和。
        表达式可以是一个常量、一个变量、一个函数调用,或者由运算符和操作数组成的复杂式子。在 C 语言中,表达式的计算遵循一定的优先级和结合性规则。
·优先级和结合性

        C 语言中的运算符按照优先级从高到低排列,同一优先级的运算符按照结合性从左往右或从右往左计算。优先级和结合性决定了表达式的计算顺序。
优先级和结合性的规则可以参考下表:
运算符描述结合性
()圆括号左->右
[]方括号左->右
->结构体成员访问左->右
.结构体成员访问左->右
++,--自增、自减从右往左
!,~,+,-逻辑非、按位取反、正号、负号从右往左
        以上是 C 语言中的所有运算符和表达式的详细讲解,需要注意运算符的优先级和结合性,以及常见的错误情况。在编写代码时,应该仔细阅读代码,并在测试时检查结果,以确保代码的正确性。下期再会!
<hr/>        关于更多嵌入式C语言、FreeRTOS、RT-Thread、Linux应用编程、linux驱动等相关知识,关注公众号【嵌入式Linux知识共享】,后续精彩内容及时收看了解。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表