请对比看以下的两道题:
1. 设有条件的表达式:(EXP)?i++;j++,则以下表达式中与(EXP)完全等价的是:
A.(EXP!=0) B.(EXP==1) 答案是A。
2.设有定义:int k=1;假如有k=k>=k, 则k=___ 答案是1.
问题1.书上说逻辑表达式若为真,值为1,假值为0,那在第1题中A和B应该是等价的呀,为什么答案B不对?
2.有的书上说像这样的语句 (3)?a:b; 最后结果肯定是a,那我想问判断数字3的真假怎么判断呢? 不是真的值为1,假的值为0 么? 那在条件判断中写 除了1,0其他的数字肯定是不对的啊???? 要这个成立,那不就是 为真的条件可以用各种非0的数表示,那书上怎么说逻辑真的值用1表示呢???
3.在第1题中 EXP为真 和 EXP的值为1 和 EXP==1, 这三者到底是什么关系?这三者有什么区别???
请逐条回答,我到底是哪里掌握不好,理解错了呢?请说清楚一点 谢谢
对于一楼的解释 我还有几个问题,补充字数打不开了。。。。。
1.bool型变量是什么东西?
2.对于一楼楼主所说的:令False=0,True=1,则 !True=False,但是!False不一定等於True 一楼楼主自己编个程序 看看 !False 是不是等于1。
1. 可是我在VC++6.0版本的编译器中 输入以下程序:
#include
int main() {int k; k=k>=k; printf("%d",k); returen 0;}
编译连接运行后,确实显示的是1, 请问 k>=k 此表达式是逻辑真 这楼主是毫无争议的吧, 那把此表达式的值(即是逻辑真的值) 赋予k 那为什么k的值运行出来是1呢?
楼主是不是说错了? 2. 还有 楼主能不能解释下 二值世界中怎么会没有1呢?不是逢二进一吗,应该有0,1 两个数啊
请jnjxcxg再看看我的回答吧,“标准"和"实现"是两个不同的范畴,绝大多数的编译器把真(非0)定义为1,但标准规定任何非零的数都是真. 但实际上,你可以想象一下,定义真为2、3、4、5、。。。是不是也可以呢?即if(1) if(2) if(3)。。。都是真。你的验证表明VC++6.0将真定义为1,我在GCC4.4.3下验证,也是同样的结果。
关于二值世界,请不要误会。比如“优”“良”“中”“差”构成了一个四值空间,而“优”“非优”构成了一个二值空间,类似的“0”和“非0”构成二值空间,从这个角度来讲1、2、3、。。。都是平权的,它们都是非0.
出题者并未紧扣标准,或者强调了具体的实现,所以出现了题2这种题目。楼主明白即可,不必过度纠缠,这本非一个尽善尽美的世界。