4566|14

120

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

请教一个If判断含义? [复制链接]

if(s<100|s==2)
if(k1==0&k2==0)
一个按位或,一个按位与,这两个判断表达式如何理解?
此帖出自51单片机论坛

最新回复

为了说明问题表达清楚,先尽量加上括号以增加易读性。 规范的写法:if ((s < 100) || (s == 2)) “||”是逻辑或,表达意为,若 (s < 100) 或 (s == 2) 两条件中只要有一为真,即.....如何如何。 不太规范的写法 if ((s < 100) | (s == 2)) 依存于编译系统。结果可能等效是因为,一般编译系统是这么做的: 1、把 (s < 100) 转换成2进制变量,假设为A。A可能是8位,也可能是16或其他位数,取决于系统。   若 (s < 100) 为假,则 (s < 100) 被转换成0,   若 (s < 100) 为真,则 (s < 100) 被转换成1或者全位数都是1——取决于编译系统。 2、把 (s == 2) 也转换成2进制变量,假设为B,如上炮制。 3、对 A 和 B 进行“位或”运算,   如两者均为0,则 (A | B) 亦为0;   如两者中有一个非0,则 (A | B) 亦为非0。 4、把 (A | B) 再逆向转换成逻辑变量,   若 (A | B) = 0 则解释成“假”;   若 (A | B) 为非0 则解释成“真”。 —— 于是得到同样的结果,虽几经折腾。 P.S. 向退休还在跟踪计算机技术的楼主致敬! [ 本帖最后由 仙猫 于 2012-12-11 11:54 编辑 ]  详情 回复 发表于 2012-12-11 11:51
点赞 关注
个人签名我来到
 

回复
举报

3

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
我是菜鸟,
我感觉if(s<100|s==2)这句可以理解为“只要S<100,此语句就为真,
下边那句is(k1==0&k2==0)可以理解为“当K1=0且K2=0时,此语句才为真。
此帖出自51单片机论坛

赞赏

1

查看全部赞赏

 
 
 

回复

39

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
if(s<100|s==2)只要 s<100就往下执行判断if(k1==0&k2==0)即k1与k2同时满足时就继续执行里面的语句,如果s<100不满足就不执行if(k1==0&k2==0)这句了
此帖出自51单片机论坛
 
 
 

回复

3404

帖子

6

TA的资源

裸片初长成(初级)

4
 
if(s<100|s==2)
if(k1==0&k2==0)
这两句有问题吧?应该是if(s<100||s==2) 和if(k1==0&&k2==0)
如果是下面的话那意思就很简单了,就是楼上说的意思了,不过s==2好像是多余的,因为s<100本身就包含了s==2的意思
此帖出自51单片机论坛
 
 
 

回复

120

帖子

0

TA的资源

一粒金砂(中级)

5
 
楼上说的是“逻辑或和逻辑与”吧,这里是一道竖和一个&,困惑!
此帖出自51单片机论坛
 
个人签名我来到
 
 

回复

3138

帖子

0

TA的资源

裸片初长成(初级)

6
 

4楼正解

1、提倡采用正规严密的写法,不易留错误隐患。
 逻辑"或"和"与"应写成"||"和"&&",虽然在这里用二进制运算的"|"和"&"做出的结果一样。

2、不要吝啬多用括号、空格,尽量让表达式一目了然,例如下面的写法:
if ((s < 100) || (s == 2))
if ((k1 == 0) && (k2 == 0))

[ 本帖最后由 仙猫 于 2012-12-8 22:19 编辑 ]
此帖出自51单片机论坛
 
 
 

回复

3138

帖子

0

TA的资源

裸片初长成(初级)

7
 
看这个帖子累死人了,因原帖下被插入了两条长短不等的广告来回切换,一条换行一条不换行,使得后面的跟帖不断地上下蹦。
[广告1] 在e络盟买电子元器件,满1888送京东礼券
[广告2] e络盟新客户下单更有优惠!详情请咨:800-820-5279
此帖出自51单片机论坛
 
 
 

回复

120

帖子

0

TA的资源

一粒金砂(中级)

8
 
是否可以理解两者等效吗?
if ((s < 100) || (s == 2))  等效 if(s<100|s==2) ?
if ((k1 == 0) && (k2 == 0)) 等效 if(k1==0&k2==0)?
此帖出自51单片机论坛

点评

为了说明问题表达清楚,先尽量加上括号以增加易读性。 规范的写法:if ((s < 100) || (s == 2)) “||”是逻辑或,表达意为,若 (s < 100) 或 (s == 2) 两条件中只要有一为真,即.....如何如何。 不太规范的  详情 回复 发表于 2012-12-11 11:51
程序能写成这样,找工作不会有人要的。 你就别分析了,写的太不规范了,两者肯定是不等效的,要不还分俩运算符干嘛。  详情 回复 发表于 2012-12-9 18:21
 
个人签名我来到
 
 

回复

6040

帖子

204

TA的资源

版主

9
 

回复 8楼 wrlsohu 的帖子

程序能写成这样,找工作不会有人要的。
你就别分析了,写的太不规范了,两者肯定是不等效的,要不还分俩运算符干嘛。
此帖出自51单片机论坛

点评

哈哈 我肯定不会找工作了,我已退休了。只是学着玩的。|| (逻辑或)和&&(逻辑与)都知道,没见过按位与和按位或这种写法,也没看到解释!这是从一个运行正常的程序看的。那么请你解释 if(s  详情 回复 发表于 2012-12-10 13:53
 
 
 

回复

120

帖子

0

TA的资源

一粒金砂(中级)

10
 

回复 9楼 lcofjp 的帖子

哈哈 我肯定不会找工作了,我已退休了。只是学着玩的。|| (逻辑或)和&&(逻辑与)都知道,没见过按位与和按位或这种写法,也没看到解释!这是从一个运行正常的程序看的。那么请你解释 if(s<100|s==2) 和if(k1==0&k2==0)什么含义呢?
此帖出自51单片机论坛

点评

我就不分析了,沙发是正解。  详情 回复 发表于 2012-12-10 16:34
 
个人签名我来到
 
 

回复

6040

帖子

204

TA的资源

版主

11
 

回复 10楼 wrlsohu 的帖子

我就不分析了,沙发是正解。
此帖出自51单片机论坛
 
 
 

回复

120

帖子

0

TA的资源

一粒金砂(中级)

12
 
人品有问题!
此帖出自51单片机论坛
 
个人签名我来到
 
 

回复

423

帖子

9

TA的资源

纯净的硅(初级)

13
 
退休了还玩这个,真强大!!顶一个!!
此帖出自51单片机论坛
 
 
 

回复

3138

帖子

0

TA的资源

裸片初长成(初级)

14
 
原帖由 wrlsohu 于 2012-12-9 16:55 发表
是否可以理解两者等效吗?
if ((s < 100) || (s == 2))  等效 if(s<100|s==2) ?
if ((k1 == 0) && (k2 == 0)) 等效 if(k1==0&k2==0)?

为了说明问题表达清楚,先尽量加上括号以增加易读性。

规范的写法:if ((s < 100) || (s == 2))
“||”是逻辑或,表达意为,若 (s < 100) 或 (s == 2) 两条件中只要有一为真,即.....如何如何。

不太规范的写法 if ((s < 100) | (s == 2)) 依存于编译系统。结果可能等效是因为,一般编译系统是这么做的:

1、把 (s < 100) 转换成2进制变量,假设为A。A可能是8位,也可能是16或其他位数,取决于系统。
  若 (s < 100) 为假,则 (s < 100) 被转换成0,
  若 (s < 100) 为真,则 (s < 100) 被转换成1或者全位数都是1——取决于编译系统。

2、把 (s == 2) 也转换成2进制变量,假设为B,如上炮制。

3、对 A 和 B 进行“位或”运算,
  如两者均为0,则 (A | B) 亦为0;
  如两者中有一个非0,则 (A | B) 亦为非0。

4、把 (A | B) 再逆向转换成逻辑变量,
  若 (A | B) = 0 则解释成“假”;
  若 (A | B) 为非0 则解释成“真”。

—— 于是得到同样的结果,虽几经折腾。

P.S. 向退休还在跟踪计算机技术的楼主致敬!

[ 本帖最后由 仙猫 于 2012-12-11 11:54 编辑 ]
此帖出自51单片机论坛
 
 
 

回复

120

帖子

0

TA的资源

一粒金砂(中级)

15
 
非常感谢"裸片初长成",解释的很详细,向你致敬!今年刚自学c和单片机,给大家造成的阅读麻烦深感歉意,也谢谢以上各位。
此帖出自51单片机论坛
 
个人签名我来到
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表