读书人

逻辑有关问题

发布时间: 2012-03-07 09:13:51 作者: rapoo

逻辑问题
根据编译器的优化原则:如果exp1为1,就不再判断exp2
所以我感觉
if(exp1 || exp2)
{
printf( "ok...\n ");
}

if(exp1)
{
printf( "ok...\n ");
}
else if(exp2)
{
printf( "ok...\n ");
}
在结果上是完全一样的...
但我的程序貌似不一样,也不知道是不是这个问题,也找不出有什么不一样!
希望赐教!

[解决办法]
怎么不一样了说说看

[解决办法]
写程序不要依赖编译器的处理模式
[解决办法]
else if(exp2)
是说明
这里要求的是:
exp1==false
exp2==true

当然逻辑不一样了

而原体在这个分支上要求的是:
exp1==任意
exp2==true
[解决办法]
第一个是:
exp1 || exp2

第二个是:
(!exp1)&&(exp2)
[解决办法]
第一个是:
exp1 || exp2

第二个是:
(!exp1)&&(exp2)


你用真值表算一下,不一样
[解决办法]
但结果ms应该是一样的吧
[解决办法]
if(exp1 || exp2)
{
printf( "ok...\n ");
}

if(exp1)
{
printf( "ok...\n ");
}
else if(exp2)
{
printf( "ok...\n ");
}

程序运行的结果一样,逻辑上也一样!

lz好好看看程序!!

[解决办法]
对于:if(exp1 || exp2)
exp1和exp2可以相容
而:if(exp1) else if(exp2)
exp1和exp2是互斥的

读书人网 >C语言

热点推荐