+ -
当前位置:首页 → 问答吧 → if语句中对零变量的判断

if语句中对零变量的判断

时间:2010-09-02

来源:互联网

本帖最后由 sunluky 于 2010-09-02 09:23 编辑

场景一:Variable是a,如果a等于0,就返回。

程序11:
if (a==0) return 0;

程序12:
if( !a ) return 0;

场景二:Variables是a和b,如果a和b之一等于0,就返回。

程序21:
if ((a==0) || (b==0)) return 0;

程序22:
if( !a || !b ) return 0;

我的问题就是程序11和12所代表的判断方式(==判断) 与 程序21和22所代表的判断方式(!=判断) 之间有无优劣之分?

作者: sunluky   发布时间: 2010-09-02

如果a是用来表示整数,那么就用==0这种算术判定
如果a用来表示逻辑,就用逻辑判定。
视上下文而定,就像NULL是专门用来给指针赋值的0,'\0'是专门给字符赋值的0一样

作者: davelv   发布时间: 2010-09-02

回复 davelv
恩,你说得不错。但如果这个变量(int或者char)都能用==和!=来判断呢,那两种方法之间有没有哪个更好这一说呢? 我其实就是想知道==和!=哪个更好?还是一样好?

作者: sunluky   发布时间: 2010-09-02

对于a==0和!a来说是一样的
PS:程序22里头你打错了吧,应该是&&吧= =!

作者: daybreakcx   发布时间: 2010-09-02



QUOTE:
回复  davelv
恩,你说得不错。但如果这个变量(int或者char)都能用==和!=来判断呢,那两种方法之间有没 ...
sunluky 发表于 2010-09-02 09:11



我上面的意思其实就是,让人更容易看懂你的代码就是最好的。

作者: davelv   发布时间: 2010-09-02

个人认为 (a == 0) && (b == 0) 要直观一点

作者: 论坛ID   发布时间: 2010-09-02

回复 daybreakcx


呵呵,眼神很犀利啊

作者: sunluky   发布时间: 2010-09-02

我比较赞同用==来判断,接近自然语言。
以前,用if的特性来判断,可能是为了节省存储。

作者: noword2k   发布时间: 2010-09-02

回复 论坛ID

我是这样想的,判断一个变量为零,计算机是需要对二进制码每一位进行判断后才得出为0,而判断非零只要在二进制码中找到一个非零就可以了,是不是效率更高点?

作者: sunluky   发布时间: 2010-09-02



QUOTE:
回复  论坛ID

我是这样想的,判断一个变量为零,计算机是需要对二进制码每一位进行判断后才得出为0,而 ...
sunluky 发表于 2010-09-02 09:26




    这种程度的优化,编译器会帮你做。

作者: noword2k   发布时间: 2010-09-02

回复 sunluky


    你说的是汇编阿,汇编判断用的就是cmpl指令,并不是一个位一个位判断的。

作者: 论坛ID   发布时间: 2010-09-02

刚测试了下,!a和a==0产生的汇编代码是一样的。

作者: 论坛ID   发布时间: 2010-09-02

无区别。喜欢那个就用那个!

作者: zhangsuozhu   发布时间: 2010-09-02

汇编生成代码是相同的,我这里都是送eax然后testl接着jne

作者: daybreakcx   发布时间: 2010-09-02

谢谢各位了!

作者: sunluky   发布时间: 2010-09-02



QUOTE:
回复  sunluky


    你说的是汇编阿,汇编判断用的就是cmpl指令,并不是一个位一个位判断的。
论坛ID 发表于 2010-09-02 09:31




    判断是不是0,用test eax,eax最快。

作者: noword2k   发布时间: 2010-09-02

相关阅读 更多

热门下载

更多