++i的编译问题
答案:5 悬赏:80 手机版
解决时间 2021-02-05 12:15
- 提问者网友:世勋超人
- 2021-02-05 00:17
++i的编译问题
最佳答案
- 五星知识达人网友:渡鹤影
- 2021-02-05 01:35
这与编译系统有关系,首先看到++i,执行i=i+1;然后是+法,这里先不能算;待以后决定
第二个++i,执行i=i+1,这时i就成了5,然后看到第二个加法运算符,而且与第一个加法是同级别的,所以可以执行第一个加法运算,而此时i已经是5了,所以这次的运算结果为10,结果会暂存到中间变量或寄存器中;
见到第三个++i时,执行i=i+1,i就变成了6,与第一个加法的运算结果进行运算,结果就变成了10+6=16;
而i的结果为6
第二个++i,执行i=i+1,这时i就成了5,然后看到第二个加法运算符,而且与第一个加法是同级别的,所以可以执行第一个加法运算,而此时i已经是5了,所以这次的运算结果为10,结果会暂存到中间变量或寄存器中;
见到第三个++i时,执行i=i+1,i就变成了6,与第一个加法的运算结果进行运算,结果就变成了10+6=16;
而i的结果为6
全部回答
- 1楼网友:迟山
- 2021-02-05 06:14
为什么要写这种代码呢?让人看都要看半天,代码是用来生产的,还要给别人看的。
- 2楼网友:蓝房子
- 2021-02-05 05:12
说实话,我还是不懂不过你试一下
a=(--i)+(--i)+(++i); 结果是4;2(愚见:核心1做i--,i=2;核心2做i--,i=1;核心1做i+i;......)
a=(--i)+(++i)+(--i);结果是8;2
我是认为是因为是处理器多核和资源共享的问题引起的,不过多半我都错了,毕竟处理器不可能一个+-法都平分,太梦幻了
不过你有单核或者3核什么的,一运行就能判决我的答案,可惜我们寝室都是双核的。。。
a=(--i)+(--i)+(++i); 结果是4;2(愚见:核心1做i--,i=2;核心2做i--,i=1;核心1做i+i;......)
a=(--i)+(++i)+(--i);结果是8;2
我是认为是因为是处理器多核和资源共享的问题引起的,不过多半我都错了,毕竟处理器不可能一个+-法都平分,太梦幻了
不过你有单核或者3核什么的,一运行就能判决我的答案,可惜我们寝室都是双核的。。。
- 3楼网友:愁杀梦里人
- 2021-02-05 03:50
a=(++i)+(++i)+(++i);i=3
第一个++i i=4;//第一个不受第三个影响,C语言中只能影响到前一个
第二个++i i=5; //第三个++i后随着更改为6
第三个++i i=6;但会改变它前一个i的值,也就是第二个++i的结果
a=4+6+6=16
这个可以自己验证下
第一个++i i=4;//第一个不受第三个影响,C语言中只能影响到前一个
第二个++i i=5; //第三个++i后随着更改为6
第三个++i i=6;但会改变它前一个i的值,也就是第二个++i的结果
a=4+6+6=16
这个可以自己验证下
- 4楼网友:孤老序
- 2021-02-05 02:36
应该是优先级的问题
a=(++i)+(++i)+(++i);
首先执行的应该是3个++i 这个时候i=6
最后执行三个加法 a=18
我使用的是VS2010编译的,不知道你用的是什么编译系统
而在Unix C下面编译的时候会有warning: #4279-D: the expression depends on order of evaluation
a=(++i)+(++i)+(++i);
但输出结果是15,6
真正的问题就在于你不应该假设编译器会先编译那些,C++标准中没有规定右边的表达式的计算顺序一定是从左到右的,有可能最后一个++i先被计算,最后计算再计算第一个
你这样的表达式在C++标准中被定义为行为未定义出现什么样的结果都是可以接受的,夸张的说编译器将这段代码编译成格式化硬盘都可以
a=(++i)+(++i)+(++i);
首先执行的应该是3个++i 这个时候i=6
最后执行三个加法 a=18
我使用的是VS2010编译的,不知道你用的是什么编译系统
而在Unix C下面编译的时候会有warning: #4279-D: the expression depends on order of evaluation
a=(++i)+(++i)+(++i);
但输出结果是15,6
真正的问题就在于你不应该假设编译器会先编译那些,C++标准中没有规定右边的表达式的计算顺序一定是从左到右的,有可能最后一个++i先被计算,最后计算再计算第一个
你这样的表达式在C++标准中被定义为行为未定义出现什么样的结果都是可以接受的,夸张的说编译器将这段代码编译成格式化硬盘都可以
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯