[求助] 请教一个If判断含义?

wrlsohu   2012-12-8 14:20 楼主
if(s<100|s==2)
if(k1==0&k2==0)
一个按位或,一个按位与,这两个判断表达式如何理解?
我来到

回复评论 (14)

我是菜鸟,
我感觉if(s<100|s==2)这句可以理解为“只要S<100,此语句就为真,
下边那句is(k1==0&k2==0)可以理解为“当K1=0且K2=0时,此语句才为真。
点赞  2012-12-8 15:08
if(s<100|s==2)只要 s<100就往下执行判断if(k1==0&k2==0)即k1与k2同时满足时就继续执行里面的语句,如果s<100不满足就不执行if(k1==0&k2==0)这句了
点赞  2012-12-8 19:46
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的意思
点赞  2012-12-8 21:00
楼上说的是“逻辑或和逻辑与”吧,这里是一道竖和一个&,困惑!
我来到
点赞  2012-12-8 22:05

4楼正解

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

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

[ 本帖最后由 仙猫 于 2012-12-8 22:19 编辑 ]
点赞  2012-12-8 22:17
看这个帖子累死人了,因原帖下被插入了两条长短不等的广告来回切换,一条换行一条不换行,使得后面的跟帖不断地上下蹦。
[广告1] 在e络盟买电子元器件,满1888送京东礼券
[广告2] e络盟新客户下单更有优惠!详情请咨:800-820-5279
点赞  2012-12-8 22:26
是否可以理解两者等效吗?
if ((s < 100) || (s == 2))  等效 if(s<100|s==2) ?
if ((k1 == 0) && (k2 == 0)) 等效 if(k1==0&k2==0)?
我来到
点赞  2012-12-9 16:55

回复 8楼 wrlsohu 的帖子

程序能写成这样,找工作不会有人要的。
你就别分析了,写的太不规范了,两者肯定是不等效的,要不还分俩运算符干嘛。
点赞  2012-12-9 18:21

回复 9楼 lcofjp 的帖子

哈哈 我肯定不会找工作了,我已退休了。只是学着玩的。|| (逻辑或)和&&(逻辑与)都知道,没见过按位与和按位或这种写法,也没看到解释!这是从一个运行正常的程序看的。那么请你解释 if(s<100|s==2) 和if(k1==0&k2==0)什么含义呢?
我来到
点赞  2012-12-10 13:53

回复 10楼 wrlsohu 的帖子

我就不分析了,沙发是正解。
点赞  2012-12-10 16:34
人品有问题!
我来到
点赞  2012-12-11 08:27
退休了还玩这个,真强大!!顶一个!!
点赞  2012-12-11 10:56
引用: 原帖由 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 编辑 ]
点赞  2012-12-11 11:51
非常感谢"裸片初长成",解释的很详细,向你致敬!今年刚自学c和单片机,给大家造成的阅读麻烦深感歉意,也谢谢以上各位。
我来到
点赞  2012-12-12 14:19
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复