运算符与表达式
C语言运算符简述
运算符简介
算术运算符:+ - * / %
关系运算符:> >= == != < <=
位运算符:>> << ~ & | ^
逻辑运算符:! || &&
条件运算符:? :
指针运算符:& *
赋值运算符:=
逗号运算符:,
字节运算符:sizeof
强制运算符:(类型名)(表达式)
运算符的结合性和优先级
所有的单目运算符、条件运算符、赋值运算符其扩展运算符,结合方向都是从右向左,其余运算符的结合方向为从左向右。
初等运算符>单目运算符>算术运算符(先乘除再加减)>关系运算符>逻辑运算符(不含!)>条件运算符>赋值运算符>逗号运算符
其中 初等运算符即:圆括号()、下标运算符[]、结构体成员运算符->
强制类型转换运算符
1.可以利用强制类型转换符将一个表达式转换成所需类型。
2.一般形式 (类型名)(表达式)
逗号运算符和逗号表达式
1.逗号表达式:用逗号运算符将几个表达式连接起来。
2.一般形式:表达式1,表达式2,···,表达式n
3.求解过程:先求解表达式1,然后依次求解表达式2,直到表达式n的值。
表达式n的值即为整个逗号表达式的值。
算数运算符和算术表达式
基本的算术运算符
1.分类: + (加法运算符或正值运算符) - (减法运算符或负值运算符) * (乘) / (除) % (取余)
其中“%”运算的两端必须为整数,其余运算对象可以是整形或实型。
2.运算符两边数值必须一致才能进行运算,若不一致系统会自动进行类型转换(向长度方向增加进行)
3.所有实数的运算都是以双精度方式进行的,若是单精度数值,则需要在尾数后补0转换为双精度数。
算术表达式和运算符的优先级与结合性
1.定义:用算术运算符和括号将运算量连接起来,符合C语言语法规则的表达式。
2.运算对象:函数、常量、变量···
3.运算规则
规则 |
---|
可使用多层圆括号,但括号必须配对。运算时由内向外依次计算各表达式的值。 |
对于不同优先级的运算符,按运算符的优先级由高到低进行运算,若优先级相同,则按结合方向进行运算。 |
若运算符两侧的操作数类型不同,则先利用自动转换或强制类型转换,再运算。 |
自加、自减运算符
1.作用:“++”(自加运算符) 使运算变量的值增1,“–”(自减运算符) 使运算变量的值减1。
2.均是单目运算符。运算对象可以是整形或实型变量,但不可以是常量和表达式。
3.作为前缀或后缀与变量构成一个表达式。
4.结合方向:自右向左
赋值运算符和赋值表达式
赋值运算符和赋值表达式
1.”=”称做赋值运算符,作用是将一个数值赋给一个变量或将一个变量的值赋给另一个变量,由赋值运算符组成的表达式称为赋值表达式。
2.一般形式:变量名 = 表达式
规则 |
---|
赋值运算符的优先级别高于逗号运算符 |
赋值运算符“=”和等于运算符“==”不同 |
赋值运算符的左侧只能是变量,而不能是常量或表达式。右侧可以是表达式,包括赋值表达式 |
规定最左边变量得到的新值即为整个赋值表达式的值。 |
复合的赋值运算符
在赋值运算符之前加上其它运算符可构成复合赋值运算符
规则 |
---|
两个符号之间不可有空格 |
复合赋值运算符的优先级与赋值运算符相同 |
赋值运算中的类型转换
如果赋值运算符两侧的类型不一致,在赋值前系统将自动先把右侧表达式求得的数值按赋值号左边变量的类型进行转换(也可强制转换)
位运算
位运算符及含义
运算符 | 含义 |
---|---|
& (按位与) | 若两个相应的二进制位都为1,则该位结果为1,否则为0 |
` | ` (按位或) |
^ (按位异或) | 若两个二进制位相同,则结果为0,不同则为1 |
~ (按位取反) | 即0变1,1变0 |
<< (左移) | 将一个数的二进制位全部左移若干位 |
>> (右移) | 将一个数的二进制位全部右移若干位 |
▲以上除”~”之外,均为双目运算符,要求两侧各有一个运算量,且运算量只能是整型或字符型数据,不能为实型数据。
版权声明
Scholar’s Blog by scholargeek is licensed under a Creative Commons BY-NC-ND 4.0 International License.
由董仕麟创作并维护的scholargeek博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。
本文首发于Scholar’s Blog博客,版权所有,侵权必究。
本文永久链接:https://scholargeek.github.io/2018/02/05/C%E8%AF%AD%E8%A8%80%E5%AD%A6%E4%B9%A02/