运算符和表
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例如:
当 a=5 时
⑴ ++a
⑵ a++
表达式的值为 6,且 a=6
表达式的值为5 ,且 a=6 表达式的值为6,且 a=6, b=6
⑶ b=++a 等价于 a=a+1; b=a; ⑷ b=a++ 等价于 b=a; a=a+1;
表达式的值为5,且 a=6, b=5
说明:
++ 和 -- 的运算对象只能是变量(或运算结果是变量的表达 式), 不能是常量(或运算结果是数值的表达式)。 例如: 5++、(a+2)++ 不合法。 具有右结合性,结合方向为从右到左。 例如: –a++ 等价于 -(a++) 如果有多个运算符连续出现时,C系统尽可能多的从左到右 将字符组合成一个运算符 例如: i +++ j 等价于 ( i++)+j -i+++-j 等价于 -(i++)+(-j)
3.1 运算符的有关概念
作用:
• 对运算对象完成规定的操作运算
类型:
• 按运算对象分:
单目、双目、三目 算术、赋值、关系、逻辑 条件、逗号、位、其他
• 按功能分:
ห้องสมุดไป่ตู้
3.2运算符的优先级和结合性
优先级 • 指各种运算符号的运算优先顺序 例如:算术运算优先于关系运算 算术运算中先 * / 后 +
表达式1 ? 表达式2 : 表达式3
例如:m<n ? x : a+3 a++>=10 && b-->20 ? a : b x=3+a>5 ? 100 : 200
C语言中唯一的三目运算符,要正确区分用 ?和 : 分隔的表达式 涉及条件运算符的优先级与结合性
条件运算符优先级
条件运算符优先级高于赋值、逗号运算符,低于他运算
3.11 取地址运算符 &
• 为单目运算符 • 运算对象只能是变量 • 运算结果是变量的存储地址 例如有定义: int a , student; char ch; 可以对变量a、ch、student 进行&运算: &a &ch &student
3.12 长度运算符 sizeof
• 为单目运算符 • 运算对象只能是变量名或数据类型标识符 • 运算结果为该变量或该数据类型的长度 main( ) 运行jc2_d { int a=5; double x; printf("%d %d ",sizeof(int),sizeof(a)); printf("%d %d ",sizeof(double),sizeof(x)); printf("%d %d\n",sizeof(float),sizeof(char)); }
假设ai和bi均是一个二进制位(bit)
运算对象 逻辑运算结果
ai
0 0 1 1
bi
0 1 0 1
ai&bi
0 0 0 1
ai|bi
0 1 1 1
ai ^bi
0 1 1 0
˜ai
1 1 0 0
例如:假设a=10,b=010 求: a&b、 a | b、 a^b、˜a
程序如下:
main( ) { int a=10, b=010; printf("%d %d\n", a&b, a|b); printf("%d %d\n", a^b, ~a); }
3.10 逗号运算符与逗号表达式
逗号表达式的一般形式
表达式1,表达式2,……,表达式n 逗号表达式的值 • 从左向右,依次对表达式求值,最后得到表达式n 的值就 是逗号表达式的值 例如:⑴ a=5, a++, a* 3 表达式值为 18,且a=6 ⑵ t=1, t+5, t++ 表达式值为 1,且t=2 ⑶ x=(a=3*5, a*4 ) 赋值表达式的值为60,且x=60, a=15
说明:
关系运算的结果应该是逻辑值。C语言用数值用 1 表示 逻辑真, 0 表示逻辑假 例如: 7>5 的值是 1,5>7 的值是 0
'a'>'b'的值是 0, 'a'<'b' 的值是1
即关系表达式的值:0 或1 实型数可进行大于或小于比较,但通常不进行 == 或 != 的关系运算
3.7 逻辑运算符于逻辑表达式
3.8位运算符
~ & ^ | << >>
单目
位逻辑运算符
移位运算符
低于单目、算术运算符, 高于其他运算符
低于单目、算术和关系运 算符,高于其他运算符
位运算符的运算对象只能是整型数据或字符型 数据,不能是实型数据 运算对象一律按二进制补码参加运算,并按位 进行运算 位运算的结果是一个整型数据
位逻辑运算符的运算规则
自增自减运算
++ --是单目运算符 有前缀和后缀两种形式 • 前缀形式: 先自增(自减)再引用; • 后缀形式: 先引用再自增(自减); 功能: 前缀形式 后缀形式 ++ a -- a a ++ a -等价于 a = a + 1 表达式的值会不同 等价于 a = a – 1 等价于 a = a + 1 等价于 a = a – 1
3.6 关系运算与关系表达式
关系运算符 (左结合) > >= < <= == != 较高 较低 关系表达式
• 用关系运算符将运算对象连接成的式子 例如:12< 'C'+1 (字符型数据比较ASCII值) a==b>=c 等价于 a == ( b>=c ) 与 (a==b)>=c 不等价 关系运算符优先于赋值,低于算术
关系与逻辑运算符的应用
表示数学公式a>b>c a>b && b>c 判断a, b, c三条线段能否组成一个三角形 a+b>c && a+c>b && b+c>a a, b不同时为负 a>=0 || b>=0 !(a<0 && b<0)
(a<0&&b>=0)||(a>=0&&b<0)||(a>=0&&b>=0)
输出结果: 2 2 8 8 4 1
3.13 运算中数据类型的转换
1 数据类型的自动转换 转换原则: 自动将精度低、表示范围小的运算对象类
型向精度高、表示范围大的运算对象类型转换 高精度 double long unsigned 低精度 int float
例如有定义: int a; char ch;
输出结果: 8 10
2 -11
0000 0000 0000 1010 & 0000 0000 0000 1000 0000 0000 0000 1000 即:a&b的值是8
0000 0000 0000 1010 ˜ 1111 1111 1111 0101 即:˜a的值是-11
移位运算
例如: a<<b a+8>>b-1 等价于 (a+8)>>(b-1)
表达式: a-ch*2+35L a-ch*2+ 35.
char, short
2. 赋值运算中的类型转换
<实型变量> = <整型表达式> • 小数部分自动补0
<整型变量> = <实型表达式> – 自动舍去实型表达式的小数部分(注意不进行四舍五 入) <字符变量> = <整型表达式> <整型变量> = <长整型表达式> – 自动截取表达式值的低字节赋值,舍去高字节 <整型变量> = <字符数据> <长整型变量> = <整型表达式> – 自动给高字节补0 或补1
位运算符
条件运算符 逗号运算符 其他运算符
& | ?:
,
^
~
<<
>>
& sizeof
*(指针)
3.3表达式的有关概念
什么是表达式 • 由运算符将运算对象连接成的式子,它描述了一个具体 的求值运算过程。 计算表达式的值 • 按照运算符的运算规则求值 • 求值时注意运算符的优先级和结合性 表达式值的类型 • 自动转换 • 强制转换
3.5 赋值运算与赋值表达式
赋值运算符(右结合) = += -= *= /= %= &= |= ^= >>= <<= 赋值表达式 • 将表达式的值存入变量对应的内存单元中 m=12 b=(++a)-2 m%=3+n 等价于 m=m%(3+n) x *= (x = 5)
说明:
赋值号左边必须是变量,右边可以是C语言任意合法的表 达式 例如:n= t +2<s 合法 a+ b = 15 不合法 赋值运算符仅优先于“,” ,且具有右结合性 例如: a= b= b*c>10 等价于:a= (b=( (b*c)>10) ) 赋值号与数学中的等号含义不同 例如:数学中 a=b 等价于 b=a C语言中 a=b 不等价于 b=a
例如:
表达式:
150+'b'*2-12.456 b=(++a)-2 a /= a *= (a = 2) f=a>b>c --a ||++b&&c++ max=a>b ? a : b a=3,a+=3,a*a 1/(float)a+6
3.4 算术运算符于算术表达式
算术运算符的优先级 ( ) + - ++ -同级
结合性 – 指运算符号和运算对象的结合方向 – 分为:从左向右(左结合)和从右向左(右结合) 例如:算术运算符为左结合 a-b+4 赋值运算符为右结合 a= b = 5
本章涉及的运算符
类型 算术运算符 种类
+ - *
/
%
++
-- +
-
赋值运算符 关系运算符 逻辑运算符
= += -= *= /= %= &= |= ^= >>= <<= > < >= <= == != && || !
运算按照从左至右的顺序进行,一旦能够确定逻辑表达式的 值,就立即结束运算 ——逻辑运算的短路性质 例如设:a=1,b=0,c=-2 a && b && c
为 0,运算终止,表达式值为 0
(a++) || ++ b&& --c
为非0,运算终止,表达式值为 1 且a为2,b为0,c为-2 (b,c保持原值)
例如: ⑴ m<n ? x : a+3 等价于:(m<n) ?(x) :(a+3) ⑵ a++>=10 && b-->20 ? a : b 等价于:(a++>=10 && b-->20) ? a : b ⑶ x=3+a>5 ? 100 : 200 等价于:x= (( 3+a>5 ) ? 100 : 200 )
逻辑运算符 && || 逻辑运算符的运算规则
!
运算对象 a b 非0 非0 0 非0 0 非0 0 0
逻辑运算结果 a&&b a || b !a 1 1 0 0 1 0 0 1 1 0 0 1
逻辑表达式
逻辑表达式 • 用逻辑运算符将运算对象连接成的式子 例如:0&&'b' a &&b || c&&d a || b-5 || c/4 !x+y >= z 逻辑运算符的优先级 和结合性: • !是单目运算符,右结合,高于算术 • && 和 || 是双目运算符,左结合,高于赋值运算符, 低于关系运算符
第3章 运算符和表达式
(时间:3次课,6学时)
主要内容:
3.1 运算符的有关概念 3.2 运算符的优先级和结合性 3.3 表达式的有关概念 3.4 算术运算符和算术表达式 3.5 赋值运算符和赋值表达式 3.6 关系运算符和关系表达式 3.7 逻辑运算符和逻辑表达式 3.8 位运算符和位运算表达式 3.9 条件运算符和条件表达式 3.10 逗号运算符和逗号表达式 3.11 取地址运算符 & 3.12 长度运算符 sizeof 3.13 运算中数据类型的转换
逻辑运算规则
从左到右依次进行逻辑计算 • 运算对象为非0表示逻辑真 • 运算对象为 0 表示逻辑假 逻辑运算的结果为 0 或 1 例如设:a=15,b=0,c=-2 a && b && c 结果为0 a || b || c 结果为1 (a+c) || b && c 结果为1
逻辑运算规则(续)
* / % 同级
+ 同级
单目
双目
高
低
没有乘方运算符,要计算a3要写作 a*a*a 的连乘,或用标准库函数 pow(a, 3) “/”的运算对象可为各种类型数据,但是当进行两个整型数据相除 时,运算结果也是整型数据 “%”要求运算对象必须是整型数据,功能是求两数相除的余数,余 数的符号与被除数的符号相同。
例如:假设a=10,b=2,求a<<b、a+8>>b-1
main( ) { int a=10, b=2; printf("%d %d\n", a<<b, a+8>>b-1); }
输出结果: 40 9 请自行分析 运行结果
3.9 条件运算符与条件表达式
条件运算符:? : 条件表达式的一般形式
条件运算符的结合性
条件运算符具有右结合性 当一个表达式中出现多个条件运算符时,应该将位 于最右边的问号与离它最近的冒号配对,并按这一 原则正确区分各条件运算符的运算对象。 例如:w<x ? x+w : x<y ? x : y 与 w<x ? x+w : ( x<y ? x : y) 等价 与 (w<x ? x+w : x<y) ? x : y 不等价