前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >运算符-8(下)

运算符-8(下)

作者头像
Python知识大全
发布2020-02-13 12:35:37
3280
发布2020-02-13 12:35:37
举报

七、逻辑运算符 有时候,我们需要在多个条件同时成立的时候才能执行某段代码,比如:用户只有同时输入了QQ和密码,才能执行登录代码,如果只输入了QQ或者只输入了密码,就不能执行登录代码。这种情况下,我们就要借助于C语言提供的逻辑运算符。 C语言提供了3个逻辑运算符:&&(逻辑与)、||(逻辑或)、!(逻辑非)。注意:这些都是英文字符,不要写成中文字符。跟关系运算符一样,逻辑运算的结果只有2个:“真”为1,“假”为0 1. 逻辑与 1> 使用格式 “条件A && 条件B” 2> 运算结果 只有当条件A和条件B都成立时,结果才为1,也就是“真”;其余情况的结果都为0,也就是“假”。因此,条件A或条件B只要有一个不成立,结果都为0,也就是“假” 3> 运算过程 总是先判断条件A是否成立 如果条件A成立,就不会再去判断条件B是否成立:因为条件A已经成立了,不管条件B如何,“条件A || 条件B”的结果肯定是1,也就是“真” 如果条件A不成立,接着再判断条件B是否成立:如果条件B成立,“条件A || 条件B”的结果就为1,即“真”,如果条件B不成立,结果就为0,即“假” 4> 举例 逻辑或的结合方向是“自左至右”。比如表达式 (a<3) || (a>5) 若a的值是4:先判断a<3,不成立;再判断a>5,也不成立。因此结果为0 若a的值是2:先判断a<3,成立,停止判断。因此结果为1 3> 举例 逻辑非的结合方向是“自右至左”。比如表达式 ! (a>5) 若a的值是6:先判断a>5,成立,再取反之后的结果为0 若a的值是2:先判断a>3,不成立,再取反之后的结果为1 因此,如果a的值大于5,结果就为0;否则,结果就为1 4> 注意 可以多次连续使用逻辑非运算符:!(4>2)结果为0,是“假”,!!(4>2)结果为1,是“真”,!!!(4>2)结果为0,是“假” C语言规定:任何非0值都为“真”,只有0才为“假”。因此,对非0值进行逻辑非!运算的结果都是0,对0值进行逻辑非!运算的结果为1。!5、!6.7、!-9的结果都为0,!0的结果为1 简化一下就是 1 int a = 0 ? 9 : ( 1 ? 11 : 0 ); 继续简化为 1 int a = 0 ? 9 : 11; 所以a的值是11


九、位运算符 所谓位运算就是对每一个二进制位进行运算。C语言一共提供了6种位运算符,只能对整数进行操作,分别是:&按位与、|按位或、^按位异或、<<左移、>>右移、~取反。 1.& 按位与 1> 使用形式:整数a & 整数b 2> 功能:整数a和b各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0。参与运算的数以补码方式出现。 3> 运算过程 总是先判断条件A是否成立 如果条件A成立,接着再判断条件B是否成立:如果条件B成立,“条件A && 条件B”的结果就为1,即“真”,如果条件B不成立,结果就为0,即“假” 如果条件A不成立,就不会再去判断条件B是否成立:因为条件A已经不成立了,不管条件B如何,“条件A && 条件B”的结果肯定是0,也就是“假” 4> 举例 逻辑与的结合方向是“自左至右”。比如表达式 (a>3) && (a<5) 若a的值是4:先判断a>3,成立;再判断a<5,也成立。因此结果为1 若a的值是2:先判断a>3,不成立,停止判断。因此结果为0 因此,如果a的值在(3, 5)这个范围内,结果就为1;否则,结果就为0 八、三目运算符 1.N目运算符 像逻辑非(!)、负号(-)这种只连接一个数据的符号,称为“单目运算符”,比如!5、-5。 像算术运算符、关系运算符、逻辑运算符这种连接二个数据的负号,称为“双目运算符”,比如6+7、8*5、5>6、4 && 0、 以此类推,连接3个数据的运算符,应该称为“三目运算符” 2.三目运算符 C语言提供了唯一一个三目运算符:条件运算符。 1> 使用格式 表达式A ? 表达式B : 表达式C 2> 运算结果 如果表达式A成立,也就是为“真”,条件运算符的结果就是表达式B的值,否则,就为表达式C的值 3> 结合方向和优先级 2.三目运算符 C语言提供了唯一一个三目运算符:条件运算符。 1> 使用格式 表达式A ? 表达式B : 表达式C 2> 运算结果 如果表达式A成立,也就是为“真”,条件运算符的结果就是表达式B的值,否则,就为表达式C的值 3> 结合方向和优先级 优先级顺序为:算术运算符 > 关系运算符 > 条件运算符 > 赋值运算符 条件运算符的结合方向是“从右至左” 1 int a = 3>4 ? 4+5 : 5>4 ? 5+6 : 6>7+1; 上面的代码等价于 1 int a = (3>4) ? (4+5) : ( (5>4) ? 我的手机 2018/9/18 星期二 22:06:22 九、位运算符 所谓位运算就是对每一个二进制位进行运算。C语言一共提供了6种位运算符,只能对整数进行操作,分别是:&按位与、|按位或、^按位异或、<<左移、>>右移、~取反。 1.& 按位与 1> 使用形式:整数a & 整数b 2> 功能:整数a和b各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0。参与运算的数以补码方式出现。 3> 举例:比如9&5,其实就是1001&101=1,因此9&5=1 4> 规律: 相同整数相&的结果是整数本身。比如5&5=5 多个整数相&的结果跟顺序无关。比如5&6&7=5&7&6 5.<< 左移 1> <<是双目运算符,使用形式:整数a<<正数n 2> 功能:把整数a的各二进位全部左移n位,高位丢弃,低位补0。左移n位其实就是乘以2的n次方。 3> 举例:3<<4,3本来是0000 0011,左移4位后变成了0011 0000,因此3<<4 = 48 = 3 * 24 4> 需要注意的是:由于左移是丢弃最高位,0补最低位,所以符号位也会被丢弃,左移出来的结果值可能会改变正负性 6.>> 右移 1> >>是双目运算符,使用形式:整数a>>正数n 2> 功能:把整数a的各二进位全部右移n位,保持符号位不变。右移n位其实就是除以2的n次方。 3> 举例:32>>3,32本来是0010 0000,右移3位后变成了0000 0100,因此32>>3 = 4 = 32 / 23 因此,如果a的值在(-∞, 3)或者(5, +∞)范围内,结果就为1;否则,结果就为0 5> 注意 C语言规定:任何非0值都为“真”,只有0才为“假”。因此逻辑或也适用于数值。比如 5 || 4的结果是1,为“真”;-6 || 0的结果是1,为“真”;0 || 0的结果是0,为“假” 3.! 逻辑非 1> 使用格式 “! 条件A” 2> 运算结果 其实就是对条件A进行取反:若条件A成立,结果就为0,即“假”;若条件A不成立,结果就为1,即“真”。也就是说:真的变假,假的变真。 4.优先级 逻辑运算符的优先级顺序为: 小括号() > 负号 - > ! > 算术运算符 > 关系运算符 > && > || 表达式!(3>5) || (2<4) && (6<1) :先计算 !(3>5)、(2<4)、(6<1),结果为1,式子变为1 || 1 && 0,再计算1 && 0,式子变为1 || 0,最后的结果为1 表达式3+2<5||6>3 等价于 ((3+2) < 5) || (6>3),结果为1 表达式4>3 && !-5>2 等价于 (4>3) && ((!(-5)) > 2) ,结果为0 2.| 按位或 1> 使用形式:整数a | 整数b 2> 功能:整数a和b各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1,否则为0。参与运算的数以补码方式出现。 3> 举例:比如9|5,其实就是1001|101=1101,因此9|5=13 4> 规律: 相同整数相|的结果是整数本身。比如5|5=5 多个整数相|的结果跟顺序无关。比如5|6|7=5|7|6 3.^ 按位异或 1> 使用形式:整数a ^ 整数b 2> 功能:整数a和b各对应的二进位相异或。当对应的二进位相异(不相同)时,结果为1,否则为0。参与运算的数以补码方式出现。 3> 举例:比如9^5,其实就是1001^101=1100,因此9^5=12 4> 规律: 二进制中,与1相^就会取反,与0相^保持原位 相同整数相^的结果是0。比如5^5=0 多个整数相^的结果跟顺序无关。比如5^6^7=5^7^6 因此得出结论:a^b^a = b 4.~ 取反 1> ~为单目运算符,具有右结合性,使用形式:~整数a 2> 功能:对整数a的各二进位进行取反(0变1,1变0) 3> 举例:比如~9,其实就是~(0000 0000 0000 0000 0000 0000 0000 1001)=(1111 1111 1111 1111 1111 1111 1111 0110),因此~9=-10 5.<< 左移 1> <<是双目运算符,使用形式:整数a<<正数n 2> 功能:把整数a的各二进位全部左移n位,高位丢弃,低位补0。左移n位其实就是乘以2的n次方。 3> 举例:3<<4,3本来是0000 0011,左移4位后变成了0011 0000,因此3<<4 = 48 = 3 * 24 4> 需要注意的是:由于左移是丢弃最高位,0补最低位,所以符号位也会被丢弃,左移出来的结果值可能会改变正负性 6.>> 右移 1> >>是双目运算符,使用形式:整数a>>正数n 2> 功能:把整数a的各二进位全部右移n位,保持符号位不变。右移n位其实就是除以2的n次方。 3> 举例:32>>3,32本来是0010 0000,右移3位后变成了0000 0100,因此32>>3 = 4 = 32 / 23

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-09-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python 知识大全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档