




已阅读5页,还剩37页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章关系运算符和位运算符 1 本节主要内容介绍 3 5 5关系运算符和关系表达式3 5 6逻辑运算符和逻辑表达式3 5 7条件运算符和条件表达式3 5 9位运算符3 5 10求字节运算符 2 3 5 5关系运算符和关系表达式 1 关系运算符及其优先次序 大于 大于或等于 等于 不等于 说明 关系运算符的优先级低于算术运算符关系运算符的优先级高于赋值运算符 3 关系运算符和关系表达式 如 c a ba b ca bc 建议 使用 能使关系更清晰 c a b a b c a b c a b c 4 2 关系表达式用关系运算符将两个表达式 可以是算术表达式或关系表达式 逻辑表达式 赋值表达式 字符表达式 接起来的式子 称关系表达式例 a b a b b c a 3 b 5 a b bb 的值为 真 表达式的值为1 a 3 b 2 c 1则关系表达式 a b c 的值为1 C语言中没有专用的逻辑值 1代表真 0代表假 关系运算符和关系表达式 5 关系运算符和关系表达式 例inti 1 j 7 a a i j 4 0 则a的值为 例inta 3 b 2 c 1 d f a b a b cb cbf a b c a 5 b b c 例 a 0结果为 A 100结果为 例若a 0 b 0 5 x 0 3 则a x b的值为 表达式值1 表达式值1 表达式值0 d的值为1 f的值为0 表达式值0 表达式值1 表达式值1 2 1 0 0 6 关系表达式使用注意 尽量使用 以使关系清晰 如 a b b c 避免类似错误 如 要表示x a b 不可写为 a a x b 应避免对实数作相等或不等的判断 如 1 0 3 0 3 0 1 0结果为0 可改写为 fabs 1 0 3 0 3 0 1 0 1e 6注意区分 与 常把 误写为 如 a 1与a 1含义不同 关系运算符和关系表达式 7 3 5 6逻辑运算符和逻辑表达式 1 逻辑运算符及其优先次序 1 逻辑与 相当于其他语言中的AND 2 逻辑或 相当于其他语言中的OR 3 逻辑非 相当于其他语言中的NOT例 a b若a b为真 则a b为真 a b若a b之一为真 则a b为真 a若a为真 则 a为假 优先次序 算术运算符关系运算符 赋值 8 逻辑运算符和逻辑表达式 在C语言中 0被看成是 假 假 就是0非零值被看成是 真 真 就是1如 a 3 5 5 3看成 真 真 值为1注意 数学上关系式0 x 100要写成 0 x x 100 9 逻辑运算符和逻辑表达式 如 a b x ya b x y a a b 如 a b x y a b x y a a b 建议 使用 能使关系更清晰 10 2 逻辑表达式用逻辑运算符将关系表达式或逻辑量连接起来的式子就是逻辑表达式 逻辑表达式的值应该是一个逻辑量 真 或 假 例 设a 4 b 5 a的值为0a b的值为1a b的值为1 a b的值为14 0 2的值为1 任何非零的数值被认作 真 逻辑运算符和逻辑表达式 11 例 5 3 8 4 0自左向右运算 1 0逻辑值为0 8 3逻辑值为0 4 1值为3 0逻辑值为1 5 3逻辑值为1 表达式值为0 逻辑运算符和逻辑表达式 12 在逻辑表达式的求解中 并不是所有的逻辑运算符都要被执行 1 a b c只有a为真时 才需要判断b的值 只有a和b都为真时 才需要判断c的值 2 a b c只要a为真 就不必判断b和c的值 只有a为假 才判断b a和b都为假才判断c 例 m a b n c d 当a 1 b 2 c 3 d 4 m和n的原值为1时 由于 a b 的值为0 因此m 0 而 n c d 不被执行 因此n的值不是0而仍保持原值1 逻辑运算符和逻辑表达式 13 逻辑运算符和逻辑表达式 例3 12逻辑表达式的不完全计算voidmain inta b c d a 0 b 1 c a a 2 b 1 c 0 d 1 14 逻辑运算符和逻辑表达式 逻辑运算符的应用 1 表示成绩 grade 在90以上 含 和60分以下的情况 grade 90 grade0 能被400整除 year 4 0 year 100 0 year 400 0 4 表示x是数字字符的情况x 0 x 48 x 57 15 课堂练习 1 已有定义语句 intx 3 y 4 z 5 则值为0的表达式是 A x y B x y zD y z y z2 x为奇数时值为 真 x为偶数时值为 假 表达式是 A x 2 1 B x 2 0C x 2D x 2 3 已有定义语句 intm 0 n 1 执行表达式 m 59 后 n的值是 A 1B 2C 3D 44 已有定义语句 intm 0 n 3 执行表达式 m 5 3 n 7 9 后 n的值是 A 1B 2C 3D 4 16 课堂练习 5 能正确表示数学关系式100 s 300的表达式为 A s 100 则表达式 a b的值为 A 0 B 1 C 2 D 37 设整型变量x为7 使整型变量y不为2的表达式是 A y x 3 B y x 3 C y x 3 D y 8 x 17 3 5 7条件运算符和条件表达式 C语言提供了一个简单的条件赋值语句或条件表达式 一般形式表达式1 表达式2 表达式3功能 先判表达式1 若非0 则值为表达式2的值 否则为表达式3的值 条件运算符的优先级高于赋值运算符 但低于关系运算符和逻辑运算符 例如 a 1 b 2 c a b 3 4 main inti 3 j 5 k k i j i j printf i d j d k d n i j k i 4 j 5 k 3 18 条件运算符和条件表达式 条件表达式说明 条件表达式语句功能相当于一种条件语句 但不等价于一般if语句 表达式2 表达式3不仅可以是数值表达式 还可以是赋值表达式或函数表达式 如 a b a 100 b 100 a b printf d a printf d b 表达式2 表达式3的类型可以不同 此时条件表达式值取二者中较高的类型 如 x y 1 1 5 若x y 则值为1 0 若x y 则值为1 5 19 条件运算符和条件表达式 例3 13输入两个数 输出其中较大的数 include stdio h main floata b max printf pleaseinputtworealnumbers scanf f f 20 条件运算符和条件表达式 例 输入一个字符 判别它是否大写字母 如果是 将它转换成小写字母 如果不是 不转换 然后输出最后得到的字符 程序 includevoidmain charch scanf c 运行结果 输入 A 输出 a 21 应用运算符和表达式应注意运算符功能运算符与运算对象的关系要求运算对象的个数要求运算对象的类型运算符的优先级运算的结合方向运算结果的类型混合运算中的类型转换 条件运算符和条件表达式 22 3 5 9位运算符 概念位运算是指按二进制位进行的运算 因为在系统软件中 常要处理二进制位的问题 例如 将一个存储单元中的各二进制位左移或右移一位 两个数按位相加等 语言提供位运算的功能 与其他高级语言 如PASCAL 相比 具有很大的优越性 23 位运算符 语言提供的位运算符有 运算符含义运算符含义 按位与 取反 按位或 右移 1 位运算符中除 以外 均为二目 元 运算符 即要求两侧各有一个运算量 2 运算量只能是整型或字符型的数据 不能为实型数据 说明 24 1 按位与 运算符 按位与是指 参加运算的两个数据 按二进制位进行 与 运算 如果两个相应的二进制位都为 则该位的结果值为 否则为 即 例 并不等于 应该是按位与运算 注意 如果参加 运算的是负数 如 3 5 则要以补码形式表示为二进制数 然后再按位进行 与 运算 3 5的值得 00000011 3 00000101 5 00000001 1 25 按位与 运算符 按位与运算有两个特点 和二进制位数0相与则该位被清零 和二进制位数 相与则该位保留原值不变 利用这两个特点 可以指定一个数的某一位 或某几位 置0 也可以检验一个数的某一位 或某几位 是否是 例如 a a只保留a的右端两位二进制位数 又如 若a 4值为4 则变量a的右端第3位为 按位与运算符 和逻辑与运算符 不同 对于逻辑与运算符 只要两边运算数为非0 运算结果为1 例如41 165的值是1 26 2 按位或 运算符 两个相应的二进制位中只要有一个为 该位的结果值为 即 例 060 017 将八进制数60与八进制数17进行按位或运算 27 按位或 运算符 0000000000101001 十进制数41 0000000010100101 十进制数165 0000000010101101 十进制数173 利用按位或运算的特点 可以指定一个数的某一位 或某几位 置1 其它位保留原值不变 例如 a a 3 把a的右端两位二进制位数置1 其它位保留原值不变 a a 0 xff 把a的低字节全置1 高字节保持原样 a a 0 xff00 把a的高字节全置1 低字节保持原样 28 3 异或 运算符 异或运算符 也称XOR运算符 它的规则是 若参加运算的两个二进制位同号则结果为 假 异号则结果为 真 即 0 0 0 0 1 1 1 0 1 1 1 0 例 即 071 052 023 八进制数 29 异或 运算符 例如 inta 41 165 则a的值为140 运算过程用二进制表示如下 0000000000101001 十进制数41 0000000010100101 十进制数165 0000000010001100 十进制数140 按位异或运算可以把一个数的二进制位的某一位 或某几位 求反 0变1 1变0 例如 a a 3 将变量a的最右端的二位求反 30 4 取反 运算符 是一个单目 元 运算符 用来对一个二进制数按位取反 即将 变 将 变 例如 是对八进制数 即二进制数 按位求反 31 取反 运算符 例如 inti 199 则 i值为 200 这是因为 十进199写成二进制 0000000011000111把它按位取反1111111100111000 这个数是整型十进制数 200在内存的补码表示 111111100110111000000011001000 32 5 左移运算符 左移运算符是用来将一个数的各二进制位全部左移若干位 例如 a 2将 的二进制数左移 位 右补 若 即二进制数 左移 位得 十进制数 高位左移后溢出 舍弃 chara 5 b b a 3 a的二进制值为00000101 执行语句b a 3 之后b的值为00101000 十进制数40 5 2 2 2 运算后a的值并没有改变仍为5 每左移1位 相当于乘以2 若高位移出的部分包含有二进制位数1 则不能用左移代替乘以2 33 6 右移运算符 右移运算符是a 2表示将a的各二进制位右移2位 移到右端的低位被舍弃 右移时 对于正整数和无符号整数 高位 左端 补0 对于负数 高位 左端 补1 补码表示法最高位1表示负数 例如 chara 41 b b a 3 用二进制来表示 a的值为00101001 十进制数41 执行语句b a 3 之后b的值为00000101 十进制数5 41 2 2 2 注意是整数除 运算后a的值并没有改变仍为41 右移时 每右移1位 相当于除以2 整数除 34 7 位运算赋值运算符它们是 2相当于a a 2 b c相当于b b c8 位运算优先关系例如 语句a 10执行后a的值为8 的优先级高于 先进行位移运算 35 3 5 10求字节数运算符sizeof 是一个单目运算符 返回运算对象所占内存总空间的字节数 它的运算对象可以是变量 常量或数据类型 它有三种形式 sizeof 数据类型 sizeof 变量或常量 sizeof 变量或常量 通常用于确定数组或结构体长度 也用于动态分配内存空间 后面章节会学到 36 例3 15sizeof运算符的一个实例 include stdio h main charch floatf printf sizeof5 0 d n sizeof5 0 printf float d n sizeof f printf int d n sizeof int printf char d n sizeof ch printf sizeof c d n sizeof c 运行情况如下 sizeof5 0 8float 4int 2char 1sizeof c 2 37 课堂练习 1 intx a 则语句x a 4 a 2 运行后 x a的值依次为 2 若已定义intx 3 y 10 z 语句z x y 运行后z的值为 3 若定义inta 5 b 8 c 12 则表达式a b b c的值为 4 inta b 则表达式 a 2 b 5 a 2 b a b 的值是 5 intm 5 n 3 则表达式 m 1 n 1 m n 的值是 38 课堂练习 6 若有定义 inta b doublex 则以下不符合C语言语法的表达式是 A x 3 B a 2 C a b 2 D x a b7 若有定义 intb 7 floata
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论