社区
C语言
帖子详情
初学C语言,关于算术运算的问题。
fengwu__
2008-07-23 09:44:59
C语言代码:
main()
{
int i=5;
int q=(++i)+(++i)+(++i);
printf("%d",q);
}
第一个问题:q是否应该等于24?
第二个问题:我使用VC++6.0编译运行,得到q=22;使用VS2005编译运行,得到q=21。为什么会得到这两个结果?
第三个问题:如果我把int q=(++i)+(++i)+(++i)改为q=i+(++i)+(++i),
仍使用VC6.0编译运行,为什么结果是19?
...全文
112
11
打赏
收藏
初学C语言,关于算术运算的问题。
C语言代码: main() { int i=5; int q=(++i)+(++i)+(++i); printf("%d",q); } 第一个问题:q是否应该等于24? 第二个问题:我使用VC++6.0编译运行,得到q=22;使用VS2005编译运行,得到q=21。为什么会得到这两个结果? 第三个问题:如果我把int q=(++i)+(++i)+(++i)改为q=i+(++i)+(++i), 仍使用VC6.0编译运行,为什么结果是19?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fengwu__
2008-07-23
打赏
举报
回复
可能是我的问题没有说清楚。。
我想知道VC6.0是如何计算q=(++i)+(++i)+(++i)的?在内存中,是否只有一个地址存放i?如果是,那么i自增三次,然后结果应该是24。如果将(++i)看做一个函数,那么i自增后的值放在什么地方?是什么原因使程序又开辟了一块空间来存放++i的结果?还有该赋值表达式的运算顺序是怎样的?
eric_0206
2008-07-23
打赏
举报
回复
有意思,关注一下~!
mylinx
2008-07-23
打赏
举报
回复
应该是21吧就同楼上说的的一样,()()()运算级别比++高。所以应该是先计算()内部的,
在不同的系统上测试的结果不一样是因为不同的系统计算的顺序不同吧!具体的我也不是很清楚。
在进行编程的时候,尽量的不要这样写,结果正确与否,容易引起歧义。
realdragon2
2008-07-23
打赏
举报
回复
一般不这样写代码,这样写的结果类似于: f()+g()+h(). 三个函数相加的情形, 三个函数中先调用哪个是不确定的.
hai040
2008-07-23
打赏
举报
回复
不确定
考试也可以这样答
cheery_an
2008-07-23
打赏
举报
回复
我觉得应该是21啊,因为q=(6)+(7)+(8),括号的优先级别大于++运算符,所以绝对不是24,至于vc60得到的是22,我也想知道是为什么。
QQsoftware
2008-07-23
打赏
举报
回复
这种问题在不同的编译器上有不同的结果,Ansic标准是在编译器出现以后才推出的,很多编译器在设计的时候使用不同的计算方法!
realdragon2
2008-07-23
打赏
举报
回复
既然使用不同的编译器得出的结果不同,思维就不要拘泥于到底该以什么顺序计算,所谓,没有对错之分了,这样的题目.
btw:
Linux GCC编译器:
int q=(++i)+(++i)+(++i);
等于22,
q=i+(++i)+(++i),
等于19.
8楼的用的怎么环境?
fengwu__
2008-07-23
打赏
举报
回复
C语言运算符优先级规定:括号成员第一,包括[]和()。
所以我认为应该首先计算三个(++i),然后才按照右结合的规定计算括号外的加号。
编译器没有按照C语言的规定执行?还是“(++i)”中的括号不是运算符?
[Quote=引用 7 楼 xkyx_cn 的回复:]
i只有一个地址
来分析整个语句int q=(++i)+(++i)+(++i);
语义是:定义int型变量q,并且用表达式(++i)+(++i)+(++i)来初始化它
编译器首先就得对表达式(++i)+(++i)+(++i)求值,顺序和结果都是确定的:
(1):先求第一个(++i) 将i放入寄存器,寄存器+1,寄存器结果放回i i==6
(2):再求第二个(++i) 将i放入寄存器,寄存器+1,寄存器结果放回i i==7
(3):求i+i;将i放入另外寄存器,寄存器+i的值 寄存器结果14
(4)再求第三个(++i) 将i放入…
[/Quote]
wzzyly
2008-07-23
打赏
举报
回复
int q=(++i)+(++i)+(++i);
等于21,
q=i+(++i)+(++i),
等于18.
xkyx_cn
2008-07-23
打赏
举报
回复
i只有一个地址
来分析整个语句int q=(++i)+(++i)+(++i);
语义是:定义int型变量q,并且用表达式(++i)+(++i)+(++i)来初始化它
编译器首先就得对表达式(++i)+(++i)+(++i)求值,顺序和结果都是确定的:
先求第一个(++i) 将i放入寄存器,寄存器+1,寄存器结果放回i i==6
再求第二个(++i) 将i放入寄存器,寄存器+1,寄存器结果放回i i==7
求i+i;将i放入另外寄存器,寄存器+i的值 寄存器结果14
再求第三个(++i) 将i放入寄存器,寄存器+1,寄存器结果放回i i==8
将保存上面的i+i结果的寄存器+i的值 寄存器结果22
结果赋值给q
[Quote=引用 6 楼 fengwu__ 的回复:]
可能是我的问题没有说清楚。。
我想知道VC6.0是如何计算q=(++i)+(++i)+(++i)的?在内存中,是否只有一个地址存放i?如果是,那么i自增三次,然后结果应该是24。如果将(++i)看做一个函数,那么i自增后的值放在什么地方?是什么原因使程序又开辟了一块空间来存放++i的结果?还有该赋值表达式的运算顺序是怎样的?
[/Quote]
任务理解
C语言
算术
运算
.ppt
C语言
算术
运算
是程序设计中最基本的部分,它包括了数据类型的理解与声明,常量与变量的使用,以及
算术
运算
符的种类和
运算
规则。在
C语言
中,
算术
运算
符用于执行数值
运算
,包括基本的加、减、乘、除以及模
运算
。
算术
...
c语言
四则
运算
6. **溢出
问题
:**
C语言
的整数
运算
可能会遇到溢出
问题
,特别是在进行乘法和加法时,如果结果超出了该类型所能表示的最大值,就会发生溢出。这可能导致结果不正确,因此在处理大整数或可能溢出的操作时要特别注意。 ...
C语言
数值
运算
经典源码
"
C语言
数值
运算
经典源码"这个主题包含了
C语言
中处理数字的基本操作和算法,对于
初学
者来说是非常有价值的学习资源。下面我们将深入探讨
C语言
在数值
运算
方面的核心知识点。 1. 基本数据类型:
C语言
提供了多种基本...
C语言
之
算术
运算
符共2页.pdf.zip
本文将深入探讨
C语言
中的
算术
运算
符,这是任何编程
初学
者都需要掌握的基本概念。
C语言
的
算术
运算
符是编程中进行基本数学计算的工具,包括加法、减法、乘法、除法、取余(模
运算
)和自增/自减
运算
。这些
运算
符是...
C语言
教学+简单的
算术
运算
和表达式.pptx
【
C语言
教学】
C语言
是计算机编程的基础,尤其适合
初学
者入门。在
C语言
中,理解和掌握
算术
运算
符和表达式是编程的基础。本文主要介绍
C语言
中的简单
算术
运算
符、表达式以及相关概念。
算术
运算
符是
C语言
中最为基础的...
C语言
70,026
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章