c语言设a=2,b=0,c;则执行c=b&&a--;语句后,a的结果是2, 为什么a不是等于1呢?当b=1时,a为什么又等于1呢
5个回答
2012-01-04
展开全部
&&的特点是,只要左右表达式有一个为0,则整个表达式为0,
并且&&的运算顺序是从左向右,
所以如果&&的左表达式为0,则不会再计算右表达式,直接将整个表达式返回0,这个又叫&&短路
所以当b=0时,不会再处理a--,直接b&&a--返回0了,所以a值不变
而当b=1时,还要再根据右值是否为0才能判断整个表达式的值,所以会再处理a--,所以a值为1
并且&&的运算顺序是从左向右,
所以如果&&的左表达式为0,则不会再计算右表达式,直接将整个表达式返回0,这个又叫&&短路
所以当b=0时,不会再处理a--,直接b&&a--返回0了,所以a值不变
而当b=1时,还要再根据右值是否为0才能判断整个表达式的值,所以会再处理a--,所以a值为1
展开全部
首先, 逻辑与运算符&&有一个特征叫 “短路求值”,即从左往右运算的过程中,如果表达式的值已经确定,则不会计算剩下的表达式。
c=b && a-- 这个表达式中 b的表达式如果不成立,即&&的前半部分已经为假,整个表达式的值也是为假,所以后面的a--的语句就没有执行。
相反 b的表达式成立的情况下, &&的前半部分为真,整个表达式的值还不能确定,还依赖于a--的值。所以a--的语句执行后就a就等于1了。
除了&&,逻辑或运算符 || 也有这样的特点
c=b && a-- 这个表达式中 b的表达式如果不成立,即&&的前半部分已经为假,整个表达式的值也是为假,所以后面的a--的语句就没有执行。
相反 b的表达式成立的情况下, &&的前半部分为真,整个表达式的值还不能确定,还依赖于a--的值。所以a--的语句执行后就a就等于1了。
除了&&,逻辑或运算符 || 也有这样的特点
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
c=b&&a-- 因为b=0,是false,不执行&&后面的a--,所以a没变
c=b&&a-- 因为b=1,是true,执行&&后面的a--,执行后,a自减1,所以a=1
c=b&&a-- 因为b=1,是true,执行&&后面的a--,执行后,a自减1,所以a=1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
&&运算符的短路效应
我们知道&&运算符相当于逻辑运算符 且
也就是说,只有&&两侧都为真(也就是非零)时,这个表达式的结果才为真(一般默认是1)
那么假如&&左侧就是假(0)了,那么整个表达式可定就是假(0)了,右侧的当然也就没有必要去判断、执行了
类似的 || 运算符也有同样的效果
我们知道&&运算符相当于逻辑运算符 且
也就是说,只有&&两侧都为真(也就是非零)时,这个表达式的结果才为真(一般默认是1)
那么假如&&左侧就是假(0)了,那么整个表达式可定就是假(0)了,右侧的当然也就没有必要去判断、执行了
类似的 || 运算符也有同样的效果
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
考虑运算符的优先级
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询