查看: 4245|回复: 9
收起左侧

[已解决] C语言里的If如果不写逻辑运算符默认是在和谁比大小?

 关闭 [复制链接]
_Zing
发表于 2015-6-7 22:27:10 | 显示全部楼层 |阅读模式
本帖最后由 _Zing 于 2015-6-27 08:40 编辑


谢谢解答。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
xiaoluo
发表于 2015-6-7 22:38:57 | 显示全部楼层
本帖最后由 xiaoluo 于 2015-6-7 22:40 编辑

应该是检查 x  是不是素数,isprime 算法不好,浪费时间。

后面那个 (i+1)%5 是输出5个后换行。

不是比大小吧,是检查是否为真。
shine1991
发表于 2015-6-7 22:44:10 | 显示全部楼层
if语句只要表达式值不为零就是真
thelord
发表于 2015-6-7 23:01:12 | 显示全部楼层
if 里面是个 bool 值,0为假,非0为真
芙兰
发表于 2015-6-7 23:04:55 | 显示全部楼层
if的条件不是比较大小,而是判断表达式的真值,为真执行,为假(即0)跳过
_Zing
 楼主| 发表于 2015-6-8 08:36:58 | 显示全部楼层
本帖最后由 _Zing 于 2015-6-8 08:40 编辑
thelord 发表于 2015-6-7 23:01
if 里面是个 bool 值,0为假,非0为真


那请问类似于
if(a>1){
}
这样的语句,函数是怎么处理的呢?
如果a=2,那么a>1会返回一个任意的非零值?而如果a=0那么a>1会返回一个0?
实际上if看的括号内的结果是0还是非0?
那我能不能把原来的条件改成
if( IsPrime(i,prime,count) )改成:
if( IsPrime(i,prime,count) != 0 )呢?
两者有什么区别么?
谢谢。
@芙兰
落落的瓶子
发表于 2015-6-8 09:40:10 | 显示全部楼层
_Zing 发表于 2015-6-8 08:36
那请问类似于
if(a>1){
}

if 括号里面是一个布尔值,即true或false,也就是说,无论if括号里面写成什么形式,它的结果一定是布尔值,否则报错
拿你这个例子,a=2,那么a>1的结果就是true,if (a>1)就会进到if段,a=0的话,a>1的结果就是false,就会进到else段
RED_ALERT
发表于 2015-6-8 21:51:58 | 显示全部楼层
这是c语言的设计使然。在早期的c语言里并没有逻辑类型(就是布尔类型,boolean),那c语言中需要判断的地方怎么办呢?c语言的设计者就想了一个办法,就用整数来代替吧!于是c语言就规定:凡是执行if、while等语句时,就计算括号里的表达式并将结果转换为整数,如果得到整数0,就判断为假;得到其它整数就判断为真。因此你就能看到诸如 if( x%2 ) 等写法,如果计算 x%2 得到一个不为零的整数 if 就判断为真,如果等于零就为假。

总的来说,c语言没有布尔类型(最新版有),在需要判断的地方用整数代替,0为假,其它为真。

我个人认为这个设计不太好,因为它把两个意义相差很大的概念混在了一起,容易引起混淆。
方鸿渐
发表于 2015-6-9 00:12:30 | 显示全部楼层
是判断是否为真,在C语言里的话,只要不是0都是真,所以就是判断后面的表达式运算结果是否为0
_Zing
 楼主| 发表于 2015-6-27 08:40:25 | 显示全部楼层
落落的瓶子 发表于 2015-6-8 09:40
if 括号里面是一个布尔值,即true或false,也就是说,无论if括号里面写成什么形式,它的结果一定是布尔值 ...

谢谢。
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2025-5-6 23:16 , Processed in 0.133363 second(s), 17 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表