运算符与运算表达式

运算符的结合性和优先级:

结合性:

所有的单目运算符、条件运算符、赋值运算符及扩展运算符,结合方向都是从右向左,其余运算符的结合方向是从左向右。

优先级:

初等运算符>单目运算符>算数运算符(先乘除后加减)>关系运算符(不包括!)>条件运算符>赋值运算符>逗号运算符

强制类型转换运算符:

可以利用强制类型转换符将一个表达式转换成所需类型

一般形式(类型名)(表达式)

逗号运算符和逗号表达式:

逗号表达式:

用逗号运算符将几个表达式连接起来

一把形式:表达式1,表达式2,表达式3,.......,表达式n

先求解表达式1,然后依次求解表达式2,直到表达式n的值,表达式n的值就是整个逗号表达式的值。

部分易错例题:

算数运算符和算数表达式

基本算数运算符

算数运算符:

+(加法运算符或正值运算符)、-(减法运算符或负值运算符)、*(乘)、/(除)、%(求余数)

双目运算符:

双目运算符两边的数值类型必须一致才能进行运算,如果不一致,系统要先进性一致性转换,即运算符两边的数值类型向更高级别的一方保持一致

转换规则:

char->short->int->unsigned->long->float->double

数据精度:

所有实数的运算都以双精度方式进行,若是单精度,则需要在尾数后面补0转换为双精度数。

算数表达式和运算符的结合性和优先级

定义:

用算数运算符和括号将运算量连接起来的、符合C语言语法规则的表达式

运算对象:

函数、常量、变量等

可使用多层圆括号,但括号必须配对。运算时由内向外依次计算各表达式的值

对于不同优先级的运算符,按照运算符的优先级由高到低进行运算,若优先级相同,则按照结合方向进行运算

若运算符两侧的操作数类型不同,则先利用自动转换或强制类型转换,然后进行计算。

自加、自减运算符:

作用:

自加运算符"++"使运算变量的值增1,自减运算符"--"使运算变量的值减1

性质:

运算对象是整型或实型变量,但是不能对常量或表达式进行运算。均为单目运算符。

规则:

既可以作为前缀运算符,又可以作为后缀运算符

++i,--i:先使i的值加1或减1,在使用i的值

i++,i--:先使用i的值,再使i的值加1或减1

结合方向:

自左向右

赋值运算符与赋值表达式

"="称作为赋值运算符,作用是将一个数值赋值给一个变量或将一个变量的值赋值给另一个变量,由赋值运算符组成的表达式为赋值表达式

一般形式:变量名=表达式

注意事项:

赋值运算符的优先级别高于逗号运算符

赋值运算符"="有别于关系运算符"=="

赋值运算符的左侧只能是变量,不能是常量或表达式。右侧可以是表达式,也包括赋值表达式

赋值表达式将最后赋值的值作为最终结果

复合赋值运算符

定义:

在赋值运算符的前面加上其他运算符就构成了符合赋值运算符,包括+=、-+、*=、/=、%=、<<=、>>=、&=、^=、|=

注意事项:

两个符号之间不可以由空格

符合赋值运算符的优先级与赋值运算符的相同

赋值运算中的类型转换

当赋值运算符两侧的类型不一致时,在赋值前系统将自动把右侧表达式求得的数值按照赋值号左边的变量类型进行转换(也可以用强制类型转换的方式)

部分易错例题:

由printf输出的数据都隐含右对齐

scanf和printf都是C语言提供的库函数,不是语句

赋值语句时一种执行语句,必须放在函数的可执行部分才行

printf输出数据所占的宽度由系统决定

++i; --i; 也可以算赋值语句

位运算

C原因呢提供的6种位运算符

位运算的相关说明

操作数个数:

位运算种除了反"~"运算之外,其他所有位运算都是双目运算,要求运算符两侧各有一个操作数。

操作数类型:

位运算的操作数类型只针对整型或字符型数据,不能对实型数据进行位运算操作。

注意事项:

位运算仅作计算,不改变原有变量的值,只有赋值运算和自增自减运算才会改变原有变量的值。

部分易错例题:

相关推荐
lulu_gh_yu43 分钟前
数据结构之排序补充
c语言·开发语言·数据结构·c++·学习·算法·排序算法
~yY…s<#>2 小时前
【刷题17】最小栈、栈的压入弹出、逆波兰表达式
c语言·数据结构·c++·算法·leetcode
EricWang13584 小时前
[OS] 项目三-2-proc.c: exit(int status)
服务器·c语言·前端
我是谁??4 小时前
C/C++使用AddressSanitizer检测内存错误
c语言·c++
希言JY5 小时前
C字符串 | 字符串处理函数 | 使用 | 原理 | 实现
c语言·开发语言
午言若5 小时前
C语言比较两个字符串是否相同
c语言
TeYiToKu7 小时前
笔记整理—linux驱动开发部分(9)framebuffer驱动框架
linux·c语言·arm开发·驱动开发·笔记·嵌入式硬件·arm
互联网打工人no17 小时前
每日一题——第一百二十四题
c语言
爱吃生蚝的于勒7 小时前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法
羊小猪~~7 小时前
数据结构C语言描述2(图文结合)--有头单链表,无头单链表(两种方法),链表反转、有序链表构建、排序等操作,考研可看
c语言·数据结构·c++·考研·算法·链表·visual studio