原帖由 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 编辑 ] |