关于if语句中判断多个bool值问题

Felix_fhc 2018-08-17 05:31:11
bool rule1 = true, rule2 = false, rule3 = false;
if (rule1 == rule2 == rule3 ==true)
Console.Write(rule1+" "+rule2+ " "+rule3);
程序执行if中的语句
bool rule1 = false, rule2 = true, rule3 = false;
if (rule1 == rule2 == rule3 ==false)
Console.Write(rule1+" "+rule2+ " "+rule3);
程序不执行if中的语句

经过多次测试,我发现: if (rule1 == rule2 == rule3 ==true) 只要有一个rule的值为true,程序就执行if语句
if (rule1 == rule2 == rule3 ==false) 必须全部rule的值为false,程序才执行if语句

这个是为什么啊?有点想不通?是编译器错误的执行吗,还是有其他说法?
...全文
2176 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
强脚的花 2018-08-22
  • 打赏
  • 举报
回复
引用 3 楼 gujf2007 的回复:
全部为true才执行,这样写:
if (rule1 && rule2 && rule3 && rule4)

只要有一个为true就执行:
if (rule1 || rule2 || rule3 || rule 4)


标准与或非的写法
cyhmna 2018-08-22
  • 打赏
  • 举报
回复
bool rule1 = true, rule2 = false, rule3 = false;
if (rule1 == rule2 == rule3 ==true)
if判断,rule1==rule2 实际为true==false,结果为false
false==rule3实际为 false==false,结果为true
true==true,结果为true,
此条件语句执行

bool rule1 = false, rule2 = true, rule3 = false;
if (rule1 == rule2 == rule3 ==false)
if判断,rule1==rule2 实际为false==true,结果为false
false==rule3实际为 false==false,结果为true
true==false,结果为false,
此条件语句不执行
xuzuning 2018-08-21
  • 打赏
  • 举报
回复
别忘了结合方向
rule1 == rule2 == rule3 ==true
就是
rule1 == (rule2 == rule3 ==true)
rule1 == (rule2 == (rule3 ==true))
只要 rule1、rule2、rule3 不全为 false。表达式总是成立的
zlxi 2018-08-21
  • 打赏
  • 举报
回复
好销魂的写法

从左到右运算!
if (rule1 == rule2 == rule3 ==true)
rule 中有一个true rule1 == rule2 == rule3 这个怎么都是true

if (rule1 == rule2 == rule3 ==false) 同理

正怒月神 2018-08-21
  • 打赏
  • 举报
回复
引用 3 楼 gujf2007 的回复:
全部为true才执行,这样写:
if (rule1 && rule2 && rule3 && rule4)

只要有一个为true就执行:
if (rule1 || rule2 || rule3 || rule 4)

照着这个写就对了
加油馒头 2018-08-21
  • 打赏
  • 举报
回复
从右往左依次比较,可以参照赋值操作
  • 打赏
  • 举报
回复
只有教科书上的敢这么写
threenewbee 2018-08-20
  • 打赏
  • 举报
回复
rule1 == rule2 == rule3 ==true 相当于 rule1 && rule2 && rule3
rule1 == rule2 == rule3 ==false 相当于
当rule3为false的时候, rule1 && rule2
当rule3为true的时候,当rule2为false的时候 rule1
当rule3为true的时候,当rule2为ture的时候 rule1=false
也就是 (r1 && r2 && !r3) || ( r1 && !r2 && r3) || (!r1 && r2 && r3) 也就是任意一个false
number1killer 2018-08-20
  • 打赏
  • 举报
回复
引用 3 楼 gujf2007 的回复:
全部为true才执行,这样写:
if (rule1 && rule2 && rule3 && rule4)

只要有一个为true就执行:
if (rule1 || rule2 || rule3 || rule 4)

虽然可以对多个布尔式求值,但是只根据其中“一个”布尔式来进行判断。
Felix_fhc 2018-08-17
  • 打赏
  • 举报
回复
引用 8 楼 porenasckx 的回复:
从前往后比较!

就像多重运算一样;

这有什么难理解的???


主要本人是萌新, 没有想到是按照 == 运行的结果再进行==运算
E次奥 2018-08-17
  • 打赏
  • 举报
回复
从前往后比较! 就像多重运算一样; 这有什么难理解的???
BXS_null 2018-08-17
  • 打赏
  • 举报
回复
引用 6 楼 Felix_fhc 的回复:
[quote=引用 4 楼 weixin_40068689 的回复:]
就是先判断最前面的两个,看看是否相等返回一个bool,再拿返回的bool与第三个比较看是否相等返回一个bool,再拿返回的bool与第四个比较返回一个bool以此类推。。。再看最后返回的值事true还是false来判断是否执行代码块里面的内容

按照你的说法,这样我的程序确实解释得通[/quote] 因为两个值比较返回的本来就是一个bool类型的,比如你拿三个int类型的a==b==c就会报错,bool类型无法与int类型做比较,意思就是前面两个值的比较已经返回成一个bool类型了,后面的比较就是(bool)==c。。。如果你把C换成bool类型的话就不会报错继续比较下去了。。。
Felix_fhc 2018-08-17
  • 打赏
  • 举报
回复
引用 4 楼 weixin_40068689 的回复:
就是先判断最前面的两个,看看是否相等返回一个bool,再拿返回的bool与第三个比较看是否相等返回一个bool,再拿返回的bool与第四个比较返回一个bool以此类推。。。再看最后返回的值事true还是false来判断是否执行代码块里面的内容

按照你的说法,这样我的程序确实解释得通
BXS_null 2018-08-17
  • 打赏
  • 举报
回复
引用 2 楼 xuzuning 的回复:
哪位老师教你这么写的?
虽然对于全部逻辑值,这样写不会有语法错误
但他表示的是 或 关系
请教一下,这个或关系怎么看,就是最后是怎么判断执不执行下面代码块的
BXS_null 2018-08-17
  • 打赏
  • 举报
回复
就是先判断最前面的两个,看看是否相等返回一个bool,再拿返回的bool与第三个比较看是否相等返回一个bool,再拿返回的bool与第四个比较返回一个bool以此类推。。。再看最后返回的值事true还是false来判断是否执行代码块里面的内容
壶中日月长 2018-08-17
  • 打赏
  • 举报
回复
全部为true才执行,这样写:
if (rule1 && rule2 && rule3 && rule4)

只要有一个为true就执行:
if (rule1 || rule2 || rule3 || rule 4)
xuzuning 2018-08-17
  • 打赏
  • 举报
回复
哪位老师教你这么写的?
虽然对于全部逻辑值,这样写不会有语法错误
但他表示的是 或 关系
BXS_null 2018-08-17
  • 打赏
  • 举报
回复
刚刚测试了一下,
bool rule1 = false, rule2 = false, rule3 = false;
if (rule1==rule2 == rule3==false )
{
Console.Write("jinlai");
}
这样确实可以执行
但是
if (rule2 == rule3==false )
{
Console.Write("jinlai");
}
这样无法执行。
这样
bool rule2 = true, rule3 = false;
if (rule2 == rule3==false )
{
Console.Write("jinlai");
}
也可以执行
我的猜想:
拿 bool rule1 = false, rule2 = false, rule3 = false;
if (rule2 == rule3==false )
{
Console.Write("jinlai");
}
来做例子,运行的时候先判断 rule2 是否等于rule3,返回一个bool ,返回的bool再看是否等于false返回一个bool根据最后返回的bool来判断时候执行

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧