| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1297 人关注过本帖
标题:值的真假与赋值
只看楼主 加入收藏
迫秋
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2011-1-30
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:8 
值的真假与赋值
已有定义语句:int m=0,n=1;执行表达式(m=5<3)&&(n=7>9)后,n的值是?
我的解答是:5《3为假值 即0 ,赋给m,即m=0,对着呢,右面7》9为假值即0 即n=0。所以n =0
而答案说将假值直接赋予m,根据&&的运算,后面不用计算,即n=1
之前我听的课件中假值都是赋值0啊,怎么在这直接附加值了呢?
不明白。。。那到底什么时候假值为0,非0表示真,?什么时候代表数字本身意义?晕  
谢谢啊
搜索更多相关主题的帖子: 表达式 附加值 答案 
2011-02-04 21:03
点线面
Rank: 8Rank: 8
来 自:NO.-1
等 级:蝙蝠侠
帖 子:525
专家分:980
注 册:2011-1-3
收藏
得分:2 
书本说得没有错,&&是有这种功能

小代码,大智慧
2011-02-04 21:17
刘定邦
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:687
专家分:1570
注 册:2010-9-21
收藏
得分:3 
#include<stdio.h>

main()
{
    int m=0,n=1,x;
    x=(m=5<3)&&(n=7>9);//对于&&来说.前面5>3已经为0了.后面可能编译器不再往下算了.后面是什么均无所谓.
    printf("%d\n",x);
    printf("%d\n",n);//编译器没往下算.要输出N值.按初值输出

}结果为:0和1.
#include<stdio.h>

main()
{
    int m=0,n=1,x;
    x=(m=5>3)&&(n=7>9);//对于&&来说.前面5>3为1了.必须还得算后面算才能确定值..
    printf("%d\n",x);
    printf("%d\n",n);//上面表达式已经往后算了.按实际输出.
}
结果为:0和0.
#include<stdio.h>

main()
{
    int m=0,n=1,x;
    x=(m=5<3)||(n=7>9);//同理.但对于||来说.5<3为0.还得往后算.才能确定唯一的值.
    printf("%d\n",x);
    printf("%d\n",n);//上面已经往后算了.N值按实际输出.
}
结果为:0和0.
#include<stdio.h>

main()
{
    int m=0,n=1,x;
    x=(m=5>3)||(n=7>9);//而这里.5>3为1了.对于||来说.可能编译器又不往下算了.后面是什么又无所谓.
    printf("%d\n",x);
    printf("%d\n",n);//直接就输出初值.
}
结果为:1和1.
运行这几个程序.就知道是怎么回事了.我想是这样的.不知道对不对...
2011-02-04 22:19
迫秋
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2011-1-30
收藏
得分:0 
回复 3楼 刘定邦
谢谢详细的解答,但我还是不明白:题中给出的m=0 n=1 起什么作用,如果判断之前的为真,输出m值为0?还是1?是代表“真假”的1和0?还是给出的数值?同理n值。
  能不能麻烦你,如果将题中的换做m=5,n=3,会是怎样的结果呢?  谢谢啊
  我就是不明白“=”算赋值?
  比如m=5<3;  5<3为假,0,是把0数值赋予m吗?即m值是0吗?
  如果是真,m=1呢?还是题目中给出的原值?
2011-02-05 00:10
baoyuwang198
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:55
专家分:180
注 册:2011-1-22
收藏
得分:1 
我来告诉你为什么, 你说的情况是这么用的 if((m=5<3)&&(n=7>9))
只有在这种IF 语句中才存在这种短路 判断!

曾经我们两个人28楼上仰望星星
如今我一个人28层楼下仰望过去
2011-02-05 00:13
刘定邦
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:687
专家分:1570
注 册:2010-9-21
收藏
得分:2 
你是不是这个意思呀.你意思是说.如果初值M=5.N=3了.(现在 M=5<3)中.5<3为假.即为0.但M明明初值为5了.非0怎么不为真呢?但这并不矛盾.由于小于<符号的优先级比赋值符号=要高..所以暂时轮不到初值M=5说话..必须先由我5<3的值为0后再赋给你M=0.
2011-02-05 12:14
刘定邦
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:687
专家分:1570
注 册:2010-9-21
收藏
得分:0 
多看看书吧.多看看运算符优先级.及结合性.   
2011-02-05 12:19
绯苍幻想曲
Rank: 2
等 级:论坛游民
帖 子:34
专家分:49
注 册:2010-11-29
收藏
得分:1 
由于〈的优先级高于=,所以先运算5〈3,结果是0,然后把0放到M里,也就是说现在M==0了。由于&&运算符是一假即假,所以当M==0后无论后面的N是何值此&&的值均为假(0),所以系统不再对&&后面的值进行运算,所以N的值依旧是开始的值,并没有改变。如果是真的的话那M输出后就是1,N是0。还有,双等号,也就是“==”才是等于的意思,一个等号“=”的意思是赋值
2011-02-05 13:07
nicum
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:180
专家分:712
注 册:2011-2-1
收藏
得分:1 
对于 && 运算符来说,当且仅当 && 左边表达式 值 非零时 才会计算 && 右边表达式(若果 && 左边表达式为零 则整个&&表达式 值为零,与右边表达式的值无关)
对于 || 运算符来说,当且仅当 || 左边表达式 值 为零时 才会计算 || 右边表达式(若果 || 左边表达式为1 则整个||表达式 值为1,与右边表达式的值无关)
2011-02-05 14:28
快速回复:值的真假与赋值
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022971 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved