标题: 请教一个C语言IF语句问题 [打印本页]

作者: 孤独行者    时间: 2020-3-4 23:58
标题: 请教一个C语言IF语句问题
如图所示,我本想第二个IF语句动作的要求是M1等于1,还有K1等于0时才可以动作接通Y0,  但是实际程序中无论M1是否接通,只要K1接通的话Y0就可以接通,,请问为什么是这样的,,我这样写不是代表只有M1==1和K1==0时才可以接通Y0得嘛

捕获.PNG (14.19 KB, 下载次数: 58)

捕获.PNG

作者: lovexulu    时间: 2020-3-5 00:07
if(m1==0x01&&k1==0x00)
{
...;
}
作者: adject    时间: 2020-3-5 01:19
改成 if((m1==0X01)&& (k1=0x00))
作者: 孤独行者    时间: 2020-3-5 08:05
lovexulu 发表于 2020-3-5 00:07
if(m1==0x01&&k1==0x00)
{
...;

这个可以,但是请问为什么会这样?是它IF语句规定了后面的条件到达了就判断为真这样吗
作者: 孤独行者    时间: 2020-3-5 08:07
adject 发表于 2020-3-5 01:19
改成 if((m1==0X01)&& (k1=0x00))

可以用两个括号的吗?不是只辨别括号内的条件嘛,如果两个括号不是就错了吗?请问你知道为什么我这样写不可以执行的吗
作者: xuan12321    时间: 2020-3-5 08:10
if((m1==0X01)&& (k1==0x00))
{
   yanshi(10);
   if((m1==0X01)&& (k1==0x00))
  {
}
}
作者: xuan12321    时间: 2020-3-5 08:17
if((m1==0x01)&&(k1==0x00))
{
    yanshi(10);
    if((m1==0x01)&&(k1==0x00))
    {
    Y0 =0X00;
    }
}
这样应该就可以了

作者: 黄youhui    时间: 2020-3-5 08:19
逗号的话时后一句有效,
作者: 黎明初至    时间: 2020-3-5 08:44
你的语法不对,条件&&条件
作者: MOVEORDIE    时间: 2020-3-5 09:49
语法错了
作者: 想进步要学习    时间: 2020-3-5 12:51
首先,你为什么用逗号?
其次,你需要了解你所设想的,在C语言中是如何书写表达的,就你这问而言,你需要了解这个&&
&&:并且的意思
if(条件1&&条件2):当条件1为真并且条件2为真执行if语句里面的程序
还有个符号是||
||:或的意思
if(条件1||条件2):当条件1为真或条件2为真执行if语句里面的程序(两个条件有一个满足就能进去)
作者: lovexulu    时间: 2020-3-5 12:58
孤独行者 发表于 2020-3-5 08:05
这个可以,但是请问为什么会这样?是它IF语句规定了后面的条件到达了就判断为真这样吗

你好,在C语言中if属于条件选择语句,结构为if(表达式){语句},其中表达式的含义即运算,在if语言表达式结果会强制转换为bit型,即1或0,1代表真,0代表假。真则执行后面{}中的语句,假则跳过。然而逗号在C语言中是一种优先级最低的运算符,它作为顺序求值,例如 a=(3,4,7) 结果a=7;再例 b=1;c=3;a=(5+(c+1,b);结果a=6;,运算总取最后一个表达式的值。现在再来看你写的那一句if(表达式1,表达式2)其结果就是if(表达式2),与表达式1无关,他们进行了逗号运算。接下来讲括号运算,数学中遵循括号中的表达式优先运算,在C语言中也有效,if((表达式1)&&(表达式2))这样结果也没有错,但是对于单片机来讲,它需要多一个括号运算。徒增内耗,并没有什么意义。
以上如有不正之处还望大佬们指出。
作者: lyong0704    时间: 2020-3-5 13:46

if(m1==0x01&&k1==0x00)

作者: 孤独行者    时间: 2020-3-6 10:51
黄youhui 发表于 2020-3-5 08:19
逗号的话时后一句有效,

请问这是IF语句规定的吗?还是C语言规定所有语句都一样,请教
作者: 孤独行者    时间: 2020-3-6 10:52
想进步要学习 发表于 2020-3-5 12:51
首先,你为什么用逗号?
其次,你需要了解你所设想的,在C语言中是如何书写表达的,就你这问而言,你需要 ...

多谢解答
作者: 孤独行者    时间: 2020-3-6 10:58
lovexulu 发表于 2020-3-5 12:58
你好,在C语言中if属于条件选择语句,结构为if(表达式){语句},其中表达式的含义即运算,在if语言表达式 ...

非常感谢你的详细回答,在你结尾的时候提到双括号并不是很完美,,那么请问是不是要写成IF(M0==0X1&&K1==0X0)这样才是比较好的?还有在请问一下有没有什么好的书可以说明这些C语言的基础,想学习学习,非常感谢
作者: 孤独行者    时间: 2020-3-6 10:59
lyong0704 发表于 2020-3-5 13:46
if(m1==0x01&&k1==0x00)

试了下,这个也可以,,多谢回答
作者: qcm755    时间: 2020-3-6 14:57

改成 if((m1==0X01)&& (k1=0x00))
作者: CZ1    时间: 2020-3-6 16:04
你应该写if((m1==0)&&(k1==0)) ,你这个写的语法不对。建议你好好看看c语言的书。
作者: zhy123654    时间: 2020-3-7 09:02
这个是基础语法知识,&&表示并且并列的意思
作者: TTQ001    时间: 2020-3-7 09:32
语法错了, 应该写成
if ((m1==0x01) && (k1==0x00))




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1