| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 968 人关注过本帖
标题:关于自加运算表达式的一个疑问
只看楼主 加入收藏
PANDAC
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2007-11-18
收藏
 问题点数:0 回复次数:7 
关于自加运算表达式的一个疑问
int  j=o,y;

y=++j*++j;

 

请问:y=?        过程?
搜索更多相关主题的帖子: 疑问 运算 表达 int 
2008-01-16 21:22
linsua
Rank: 1
等 级:新手上路
帖 子:275
专家分:0
注 册:2008-1-2
收藏
得分:0 
在一个表达式里最好只要有一个++(--)

如果你对我的话感到再明白不过 那恐怕你是误解了我的意思
2008-01-16 21:27
sk2363805
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-12-31
收藏
得分:0 
2
j++=1;j++=1+1=2;
y=1*2=2
2008-01-16 23:04
zglcx123
Rank: 2
等 级:论坛游民
帖 子:60
专家分:10
注 册:2007-7-2
收藏
得分:0 
等于1
2008-01-16 23:18
zglcx123
Rank: 2
等 级:论坛游民
帖 子:60
专家分:10
注 册:2007-7-2
收藏
得分:0 
先++j   
再j*(++j)
再++
2008-01-16 23:19
newseeker
Rank: 1
来 自:上海穷人
等 级:新手上路
帖 子:11
专家分:0
注 册:2008-1-11
收藏
得分:0 
程序运行的结果是4。我很不 解。
y=++j*++j    为4

y=++j*++j    为4

y=++j-++j     为0

看来 2个++j  都是 2。

达人来解释下,好么

J--J--Z--T      R--X--Z--J
2008-01-17 00:47
nobush
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2008-1-10
收藏
得分:0 
這個問題我在WATCOM幫助文件中看到過相關說明
這涉及到CPU處理數據的方式,學過彙編的就很好理解
簡單地說就是
如果 y= _1_ OP _2_ (OP表示運算符)
大部分編譯器的做法就是,分別取操作數1、2到寄存器,然後運算。
顯然,操作數是來自於同一個寄存器,而且++j優先級高。結果就是j自增兩次,然後才與計算。

又如果操作數有三個,顯然不可能都取到寄存器 有一個數可能會選擇壓棧(順序因編譯器而異)
程序代码:
#include<stdio.h>
int main()
    {
        int j=0,y;
        y=++j*++j;
        printf("j=%d,y=%d\n",j,y);
        j=0;
        y=++j*++j*++j;
        printf("j=%d,y=%d\n",j,y);
        return 0;
    }
上面的代碼 兩次計算 y分別等於4,12 映證上述解說
2008-01-17 02:34
linsua
Rank: 1
等 级:新手上路
帖 子:275
专家分:0
注 册:2008-1-2
收藏
得分:0 
incl    _j
    incl    _j
    movl    _j, %eax
    imull    _j, %eax
    movl    %eax, _y




undefined behaviour

如果你对我的话感到再明白不过 那恐怕你是误解了我的意思
2008-01-17 13:20
快速回复:关于自加运算表达式的一个疑问
数据加载中...
 
   



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

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