表达式与运算符(5)
一、基本概念
表达式:运算符、变量、常量的组合,且表达式可以求值。
运算符:对各种变量和常量进行运算的符号。
圆括号 () :括号内表达式被优先计算。
注:对任意的表达式加(),不改变()内表达式的值,仅改变复合表达式中计算顺序。
二、初等表达式
初等表达式的3种情况:1)变量或函数标识符 2)常量 3)字符串字面值
例如:int y=x+5;
其中,x:变量标识符,是初等表达式,值为变量x当前的值;
10:整数常量,也是表达式,值为10;
注:"abcd" 字符串也是初等表达式,值为指向char类型的指针;括号表达式:不改变表达式的值
三、后缀表达式
>>数组下标[] | >> 函数调用() | >>结构或联合直接成员选择. |
>> 结构和联合间接成员选择-> | >> 后缀自增++ | >> 后缀自减-- |
>>前缀自增++ | >>前缀自减-- | >>地址运算& |
>>正号运算+ | >>负号运算- | >>按位取反~ |
>>逻辑非运算! | >>类型或数据对象的大小sizeof |
示例:
四、强制类型转换
注:强制转换类型,会导致数值精度损失。
五、二元表达式
1)乘除求余表达式:乘法* 、除法/ 、求余%
注:乘除支持所有整数和小数类型,
求余运算只支持整数。
除法和求余的除数不能是0。
2)加减表达式:加法+ 、减法-
3)移位表达式:左移<< 、右移>>
4)关系表达式:小于< 、小于等于<= 、大于> 、大于等于>=
5)判等表达式:等于== 、不等于!=
6)按位与表达式:&
7)按位异或表达式:^
8)按位或表达式:|
9)逻辑与表达式:&&
a&&b
,如果变量或表达式a的值为0,则表达式结果0,不需要对变量或表达式b进行计算。
10)逻辑或表达式:||
a||b
,如果变量或表达式a的值为1,则表达式结果1,不需要对变量或表达式b进行计算。
11)真值表如下:1表示真,0表示假
示例:
六、三元表达式
条件运算符 ?:
语法: 表达式?表达式1:表达式2 //当表达式结果为真(非0)时,返回表达式1的值,否则返回表达式2的值。
七、赋值表达式
1)乘除求余复合赋值: *=、 /=、 %=
2)加减复合赋值: +=、 -=
3)位移复合赋值: 左移<<= 、右移>>=
4)位运算复合赋值: 与&= 、异或^= 、|=或
八、逗号表达式
多个表达式用逗号分割,从左到右按顺序计算。逗号表达式运算的结果是最后一个表达式的值。
int value=x1,x2;//结果是最后一个表达式x2的值。
九、常量表达式
1)预处理器常量表达式:预处理指令中使用的整数常量表达式
2)整数常量表达式:整数常量、枚举常量、字符常量、sizeof表达式、浮点常数强制转换
3)初始化常量表达式:算术常量表达式、空指针常量NULL、地址常量表达式
4)地址常量:指向静态存储期对象的指针和指向函数指示符指针,可以通过&
地址算符显式创建的地址常量,也可以创建数组或函数类型 的表达式隐式创建。
注:常量表达式的值在编译时就可以由编译器直接计算得出,不需要程序执行时计算。
常量表达式不应包含赋值、增量、减量、函数调用或逗号运算符。
×:sizeof运算符操作数可以出现上述情况,sizeof只需要根据类型推断大小,不需要对操作数求值。
参考资料:公众号: 一只爱学C的喵 C语言学习笔记
------------END------------