在C语言中,对逻辑运算符&&来说,双精度型变量是一个无效的操作数么?难道&&的两侧不能使double型的数据么

例如: double x=3.0,y=4.0,z=2.0; x&&y>z 难道就是无效的么?

第1个回答  2011-04-04
应该是可以的,按照c的标准要求,&&两侧的数据或者表达式的结果会被转换成bool类型,即非零为1,零为0。&&的结果是int型,所以也可以和double进行比较。所以应该是没问题的。你的表达式x&&y>z实际应该等效于:
bool b1 = x;
bool b2 = y;
int i = b1 && b2;
(i > z)。
如果真的编译不过,或者是你用的编译器支持的不好,或者是你的代码其他地方有语法问题。追问

>的优先级是大于&&的,晕

追答

对不起,我在这里真的犯了错误。但是回到你的问题,答案仍然是是一个合法的表达式。

追问

恩 ,谢谢你!

第2个回答  2011-04-04
可以,但是要是要使表达式为假,那么这个数必须为0.0,连0.0000001都能使表达式为真。因此不建议将该类型的数据作为表达式。
另外,判断两个double是否相等不能直接用==,因为它要求两数严格相等,相差0.000001都不行,因此可以检查两数之差绝对值是否小于0.000001 。
你给的例子当中,后面的y > z是没问题的,但前面的x就有问题了,原因上面已经说了。追问

我想问一下,如果是&位与,情况是怎么样的

追答

类型大小都不一样,要么不能位与,要么只能部分位与,答案是后者

本回答被提问者和网友采纳
第3个回答  2011-04-04
&&逻辑与是可以的,只要该数在内存中的表示不全为零,则为真
&位与是不被允许的,因为浮点型数据是无法精确表示的,所以编译器不允许这样的操作,包括float型,注意这里是编译器不允许追问

位与的话,难道对应位之间不能进行与么

追答

能,但是因为很多浮点数不能被精确表示,比如 1.798843,在电脑里面可能表示为1.79884300100011或者1.798842999899977700,这样的话比较就失去了意义,所以编译器报错不允许这样的操作

第4个回答  2011-04-04
这是有效的,double 型自动转换成 bool ,0 值转换成 false, 非0 转换成 true,等价于

x == 0 && y > z;追问

你是怎么得出等价后面的式子的?

追答

不好意思, 写错了 , x!= 0 && y > z

第5个回答  2011-04-04
可以使用double的 你这个表达式的意思实际上是 3.0 && 4.0 结果为1 然后 1 > z z=2
1>2 这里就不为ture了追问

>的优先级是大于&&的,晕

追答

哦 对... 那应该是没问题的
只要表达式为true就行啊 你这里出问题了?

相似回答