社区
C语言
帖子详情
计算符号的左右结合性决定了什么?
积木
2004-08-23 04:24:57
例如:
void f(int i)
{
cout<<i<<endl;
}
int main()
{
f(1)+f(2)+f(3)+f(4)+f(5);
return 0;
}
如果+为左结合,结果是什么?
如果是右结合,结果是什么?
不同的编译器结果不同是不是因为左右结合性不同?还是别的什么?呵呵
...全文
683
33
打赏
收藏
计算符号的左右结合性决定了什么?
例如: void f(int i) { cout<<i<<endl; } int main() { f(1)+f(2)+f(3)+f(4)+f(5); return 0; } 如果+为左结合,结果是什么? 如果是右结合,结果是什么? 不同的编译器结果不同是不是因为左右结合性不同?还是别的什么?呵呵
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
33 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sunjueqian
2004-08-24
打赏
举报
回复
哦,解释得很清楚,谢谢:)
whyglinux
2004-08-24
打赏
举报
回复
C/C++标准规定了运算符的功能和它们的结合性。运算符的结合性在C和C++中是一致的,并且不能被改变。但是在C++程序中,由于可以对运算符进行重载,所以运算符的功能会发生变化,但是它的结合性仍保持不变。
运算符的结合性决定了同级运算符时的运算顺序。例如:对于表达式 a - b + c,+、-为同级运算符,左结合,因此它的运算顺序为 (a - b) + c,即先计算 a - b 的值,然后再与 c 相加。这个运算顺序对于任何的C/C++编译器都是一致的。
问题在于:C/C++标准没有规定操作数运算的先后顺序。这也就是说,对于上面的表达式,操作数 a、b 和 c 的计算顺序是不固定的。其原因在于:每个编译器采取的计算操作数顺序不同。对于同级运算,有的从左到右,有的与此相反;甚至有可能a、b、c的计算顺序取决于表达式中运算符的优先级。
表达式或者操作数的结果不应该倚赖于表达式中操作数计算的先后顺序。
例外情况是:&&、||、?: 和 ,。对于它们,C/C++标准明确规定了操作数的计算先后顺序。例如:对于a && b,一定是先计算 a,然后根据 a 的结果决定是否再计算 b。对于这些特殊情况,应该与一般情况加以区分。
sandrowjw
2004-08-24
打赏
举报
回复
顶……顶……顶一下
laomai
2004-08-24
打赏
举报
回复
三井,把MM介绍到值班室里来,大家可以考虑不追究你的责任,不然,嘿嘿......
bianliuwei
2004-08-24
打赏
举报
回复
星星发的帖子果真不错,用顶来表示支持.
积木
2004-08-24
打赏
举报
回复
这两天公司考C语言基础,结果就闹出来点东西,虽然代码不应该这么写
但是的确有很多细节将来就是bug的隐患,这个问题不大却有可能一时图省事就那么写了
真正好的写法还是
s+=f(i),就没有任何的问题了,呵呵
错误常常在无“意义”的地方发生
an9ryfr09
2004-08-24
打赏
举报
回复
支持楼上的!!!
TO 三井: MM漂不漂亮?
不明白MM为何问这种没有意义的问题,'+'是左结合还是右结合在ANSI里面已经明确说明了都。
比如'++'或'--',他们是右结合,所以a = ++b就会先算++b,a = b++就会先算a = b
wzzxq
2004-08-24
打赏
举报
回复
f()的返回值是void,可以放在运算符里吗??
yjh1982
2004-08-24
打赏
举报
回复
所谓结合性,指的是同优先级.....函数调用肯定比+操作优先级高.
所以fun(1)+fun(2)
两个fun先计算...然后再加.
fun(1)+fun(2)+fun(3)
有可能
先fun(1),后fun(2)两者相加后加上fun(3);再
或
fun(1),fun(2),fun(3)...在把他们的临时对象相加.
这两种情况都不会影响fun的调用顺序啊.
albertlee
2004-08-24
打赏
举报
回复
晕!!!!!!!!!!!
这种代码有意义吗?
这种C语言基础知识有意义吗?
pjg
2004-08-23
打赏
举报
回复
if(mm!=beauty)
{
for( ; ;)
{
textcolor(LIGHTRED);
printf("\n\n\n");
cprintf(" BS BS BS BS\n\r");
printf("\n\n");
asm push ax
asm mov ah,0
asm int 16h
asm pop ax
continue;
}
}
sunjueqian
2004-08-23
打赏
举报
回复
我认为运算符的左右结合性不能决定函数的计算顺序,只能决定压栈的顺序,但是函数值是在什么时候算的应该要看编译系统吧。这个问题本来是这样引起的(++i)+(++i)+(++i)=?,假如i的初值是1,可能的结果都有什么呢?6也是可能的结果吧,先计算的哪一部分呢?于是问题就被扩大了。我只是想,这个问题和运算符的结合性没有关系吧。不怎么会c,问题难免会很菜,不要见笑
sunjueqian
2004-08-23
打赏
举报
回复
打个招呼,大家好。我就是那个把三井兄说把他灭了的人,我觉得这个问题很值得讨论一下,所以谢谢大家赐教啊
zqpsswh
2004-08-23
打赏
举报
回复
函数和变量在计算机里都是以地址的方式被提取的
计算机处理的态度都是一样
zqpsswh
2004-08-23
打赏
举报
回复
可以把f(n)函数看是一个表达式的地址
左右的顺序将决定提取这个f(1)+...+f(5)的表达式的先后顺序
影响到最终的结果
积木
2004-08-23
打赏
举报
回复
今天被mm逼疯了
晨星
2004-08-23
打赏
举报
回复
在VC中,下面前后两次对12345的输出顺序的确是不一样的。应该是因为“+”和“=”的结合性不同吧?
#include <iostream>
using namespace std;
int g;
int& f(int i)
{
cout<<i<<endl;
return g;
}
int main()
{
f(1) = f(2) = f(3) = f(4) = f(5);
cout << endl;
f(1) + f(2) + f(3) + f(4) + f(5);
return 0;
}
laomai
2004-08-23
打赏
举报
回复
呵呵,一3井今天屡次犯下低级错误。
1、用void类型的数据参与加法计算
2、给分时采用系统默认的20分,
3、最最不可原谅的,被计算机MM的灭了,不但影响了星星的光辉形象,更败坏了值班室的名头,
兄弟们说说该怎么处理?呵呵。
pacman2000
2004-08-23
打赏
举报
回复
int f(int i)
呵呵。顺序应该跟编译器实现有关!
cxjddd
2004-08-23
打赏
举报
回复
我来说说,不一定对:
也许要说明一点,C 里的运算不一定满足交换律,所在其运算顺序有区别。
如果不是相同的运算符,那就应该按优先等级来,这个很明确。
如果是相同的话,那就看是左结合还是右结合了。很明显,左结合是指从左算到右,右结合是指从右算到左。
TC++PL 里说,一元运算符和赋值运算符是右结合的,其他运算符都是左结合的。
加载更多回复(13)
Matlab
符号
计算
与方程组求解
一、
符号
计算
1、
符号
计算
特点 1、
计算
精确:
符号
计算
基于数学公式、定理并通过一系列推理、演绎得到方程的解或者数学表达式的值。对操作对象不进行离散化和近似化处理。 2、可应用范围有限:实际科研和生产中遇到的问题绝大多数都无法获得精确的
符号
解,这时我们不得不求助数值
计算
。 3、对待
符号
计算
态度:用其来完成公式推导和解决简单的对
计算
时效性要求不高
理解YACC中
符号
的优先级和
结合性
优先级和
结合性
是YACC中基础概念之一,本篇结合实例讲解这两个概念。
神经
符号
系统:CV与知识推理的结合
神经
符号
系统:CV与知识推理的结合 人工智能,
计算
机视觉,大模型,AI,在人工智能的发展长河中,不同的技术流派不断涌现,试图攻克智能的堡垒。其中,神经
符号
系统作为一种融合了神经网络与
符号
推理的新兴范式,正逐渐崭露头角,尤其是在
计算
机视觉(CV)与知识推理相结合的领域,展现出了巨大的潜力。它不仅有望解决传统人工智能方法的局限性,还为构建更加智能、灵活且可解释的系统开辟了新的道路。
34.操作符的属性:优先级、
结合性
即使有了操作符的优先级和
结合性
,我们写出的表达式依然有可能不能通过操作符的属性确定唯⼀的
计算
路径,那这个表达式就是存在潜在⻛险的,建议不要写出特别负责的表达式。
运算符,
结合性
,优先级
有
符号
移位 左移位运算:使用
符号
表示,整体将二进制向右侧移动,左侧补0,右移动1位,相当于除2 如果移动的位数超过所能表述的长度,则采用求余方式
计算
例如: 如果移动32位时, 32%32=0。表示,所以移位操作也是在补码的基础上移位,只不过正数的补码就是原码所以没有变化,但是负数的时候就需要注意了。在大多数情况下,我们进行移位运算,都不想要移动
符号
位,这样就是我们剩下的数据位进行移动,而
符号
位不变。
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章