搜索
查看: 2852|回复: 40
打印 上一主题 下一主题

关系运算符的问题

[复制链接]
跳转到指定楼层
楼主
发表于 2014-3-15 21:50:13 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
为什么当x=-3时,0<=x<=2为"真"
为什么当y=45.3219时,y==45.3219为"假"

最佳答案

查看完整内容

C语言里面逻辑值是O的为假, 其他的都为真 既“非0即真”。 我们可以写一个小程序证明,例如:
沙发
发表于 2014-3-15 21:50:14 | 只看该作者
C语言里面逻辑值是O的为假,  其他的都为真
既“非0即真”。
我们可以写一个小程序证明,例如:
  1. #include<stdio.h>
  2. int main(void)
  3. {
  4.     int true_val,false_val;
  5.         int x=-3;
  6.         int y=45.3219;
  7.         true_val=0<=x<=2;       
  8.         printf("\"0<=x<=2\"   真=%d\n",true_val);
  9.         false_val=y==45.3219;
  10.         printf("\"y==45.3219\"假=%d\n",false_val);//看到值木有,非0既真
  11.        
  12.         return 0;
  13.        
  14. }
复制代码


abc37.png (2.77 KB, 下载次数: 4)

abc37.png
板凳
发表于 2014-3-15 22:49:46 | 只看该作者
我猜你用了float

float y=45.3219;
那么y == 45.3219就是假

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5.         float y=45.3219;
  6.     printf("%d\n", y == 45.3219);
  7.         system("pause");
  8.         return 0;
  9. }
复制代码


字面值的小数类型为double
或者说y == 45.3219右边的45.3219是double

double和float的精度不同所以不想等,所以是0

新人请切记不要用float
地板
发表于 2014-3-15 22:51:42 | 只看该作者
噢还有第一个问题

0<=x<=2

处理次序是 (0 <= x)  <= 2
0 <= x的结果会被转化成0(假)或者1(真)
0 <= 2 或者 1<= 2都是真
所以是1
5#
 楼主| 发表于 2014-3-16 10:20:25 | 只看该作者
李掌柜 发表于 2014-3-15 22:34
C语言里面逻辑值是O的为假,  其他的都为真
既“非0即真”。
我们可以写一个小程序证明,例如:

我就是想知道为什么 当y=45.3219时,y==45.3219为"假"
6#
 楼主| 发表于 2014-3-16 10:21:14 | 只看该作者
rosynirvana 发表于 2014-3-15 22:49
我猜你用了float

float y=45.3219;

没有用float和double,只是书上的一个例子而已,当y=45.3219时,y==45.3219为"假",why?
7#
发表于 2014-3-16 12:10:48 | 只看该作者
飞翔の蓝天 发表于 2014-3-16 10:21
没有用float和double,只是书上的一个例子而已,当y=45.3219时,y==45.3219为"假",why?

只能说不要看这本书了
8#
发表于 2014-3-16 12:19:34 | 只看该作者
飞翔の蓝天 发表于 2014-3-16 10:20
我就是想知道为什么 当y=45.3219时,y==45.3219为"假"

额~~系统返回0就是假,返回1就是真啊~~那个小程序的返回值你木有看哎~~
9#
发表于 2014-3-16 12:56:49 | 只看该作者
飞翔の蓝天 发表于 2014-3-16 10:21
没有用float和double,只是书上的一个例子而已,当y=45.3219时,y==45.3219为"假",why?

这个例子是要告诉你逻辑判断,系统返回给你的值判断真假,返回0就是假,非0就是真
比如我们一个while想要一直循环可以用while(1)  ,while(50)这样的表达式,
现在把昨天那个小程序改下,更直观一点:
  1. #include<stdio.h>
  2. int main(void)
  3. {
  4.     int val;
  5.         int x=-3;
  6.         int y=45.3219;
  7.         val=0<=x<=2;       
  8.         printf("\"0<=x<=2\"   的系统返回值是:%d\n",val);
  9.         val=y==45.3219;
  10.         printf("\"y==45.3219\"的系统返回值是:%d\n",val);//看到值木有,非0既真
  11.        
  12.         return 0;
  13.        
  14. }
复制代码
我们可以让系统自己告诉我们,
0<=x<=2;  和 y==45.3219;
的逻辑值是0,还是非0;
你也可以自己判断真假,
三楼的写的很清楚了~~
-3<2是真的
y==45.3219是假的是因为系统的默认是int 类型,


10#
发表于 2014-3-16 13:31:41 | 只看该作者
李掌柜 发表于 2014-3-16 12:56
这个例子是要告诉你逻辑判断,系统返回给你的值判断真假,返回0就是假,非0就是真
比如我们一个while想要 ...

C中的变量没有默认类型……必须显式声明
11#
发表于 2014-3-16 14:31:13 | 只看该作者
本帖最后由 李掌柜 于 2014-3-16 14:40 编辑
rosynirvana 发表于 2014-3-16 13:31
C中的变量没有默认类型……必须显式声明

难到你写入口的时候不是用int main()默认的int 类型???人才
12#
发表于 2014-3-16 16:22:39 来自手机 | 只看该作者
楼主可以把哪本书扔了。
13#
发表于 2014-3-16 22:36:52 | 只看该作者
李掌柜 发表于 2014-3-16 14:31
难到你写入口的时候不是用int main()默认的int 类型???人才

说的是变量类型,不是函数返回值类型
要说利用返回值默认为int那也是  main() {},而不是int main(){}
你是不懂”默认“还是不懂”变量“?
14#
发表于 2014-3-16 23:26:43 | 只看该作者
超神级 发表于 2014-3-16 16:22
楼主可以把哪本书扔了。

我晕死,这个例子可是《C primer plus》里面的一个例子~~
15#
发表于 2014-3-16 23:30:59 | 只看该作者
rosynirvana 发表于 2014-3-16 22:36
说的是变量类型,不是函数返回值类型
要说利用返回值默认为int那也是  main() {},而不是int main(){}
...


  1. #include<stdio.h>
  2. main()
  3. {
  4.         printf("ni hao!\n");
  5. }
复制代码

字符“ni hao”可有申明???类型???

点评

K&R 写法~! 打印的字符ni hao就是一种数据类型,, 因为在这里并没有申明它,,  发表于 2014-3-17 20:30
我记得我曾经在求助版发过这段代码,什么都没有只是main. main { } 比你这·还简洁。bg  发表于 2014-3-17 12:47
话说有没有听过printf();(函数)。一些东西只是包装了一下.  发表于 2014-3-17 12:39
话说有没有听过printf();(函数)。一些东西只是包装了一下.  发表于 2014-3-17 12:39
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表