根据不同的编译器,生产的代码不一样,导致的结果也会不一样。

代码如下:

 #include <stdio.h>
void main()
{
int j = ;
int q;
q =(++j)+(++j)+(++j);
}

环境:win7

编译器:GCC

IDE:vc++6.0  /DEV-C++

结果:q = 22

 :    q =(++j)+(++j)+(++j);
mov eax,dword ptr [ebp-] 移动J=5到寄存器eax内
add eax, 在寄存器eax值上加1,eax=
0040103C mov dword ptr [ebp-],eax 把寄存器的值移动到变量j上去,j=
0040103F mov ecx,dword ptr [ebp-] 移动J=6到寄存器ecx
add ecx, 在寄存器上ecx+,j=
mov dword ptr [ebp-],ecx 把寄存器ecx上的值移到J上去,J=
mov edx,dword ptr [ebp-] 把J=7移动到寄存器edx=
0040104B add edx,dword ptr [ebp-] edx值+j 此时j=,edx=+
0040104E mov eax,dword ptr [ebp-] 把j=7Move给 第一个寄存器eax
add eax, eax再加1,此时寄存器eax=
mov dword ptr [ebp-],eax 把此时的eax的值move给 j=
add edx,dword ptr [ebp-] edx值= edx+j = +
0040105A mov dword ptr [ebp-0Ch],edx edx值 move给 j =

环境:win7

编译器:GCC

IDE: VC++ 2008

运行结果:24

  q =(++j)+(++j)+(++j);
003A1815 mov eax,dword ptr [j] //eax = 5,j = 5
003A1818 add eax, //eax = 6
003A181B mov dword ptr [j],eax j = 6
003A181E mov ecx,dword ptr [j] ecx = 6
003A1821 add ecx, ecx = 7
003A1824 mov dword ptr [j],ecx j = 7
003A1827 mov edx,dword ptr [j] edx = 7
003A182A add edx, edx = 8
003A182D mov dword ptr [j],edx j = 8
003A1830 mov eax,dword ptr [j] eax = 8
003A1833 add eax,dword ptr [j] eax = 16
003A1836 add eax,dword ptr [j] eax = 24
003A1839 mov dword ptr [q],eax

[C语言]小记q = (++j) + (++j) + (++j)的值的更多相关文章

  1. j++与++j

    (j++)+(++j)+(++j) 核心部分汇编代码 执行顺序j原始值为5,存放在栈的ebp-4中;q无初始值,存放在栈的ebp-8中先执行一次j自增赋值++j ;j=6执行第一个加法运算;值存放在C ...

  2. for循环j = j++ 和 j = ++j

    package com.test.forname; public class TestForName { public static void main(String[] args) throws E ...

  3. 存在使i > j || i <= j不成立的数吗?

    存在使i > j || i <= j不成立的数吗? 咋一看有点晕!一个数既不能大于也不能小于等于另一个数?那是什么数?答案是”非数“ 例子如下:‘ if(Double.NaN>Flo ...

  4. 给出一个数组A,找出一对 (i, j)使得A[i] <= A[j] (i < j)并且j-i最大

    题目:给出一个数组A,找出一对 (i, j)使得A[i] <= A[j] (i <= j)并且j-i最大 ,若有多个这样的位置对,返回i最小的那一对. 最直接的想法就是对于每一个 i 从数 ...

  5. hdoj 2601(判断N=i*j+i+j)

    Problem E Time Limit : 6000/3000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Sub ...

  6. GCD - Extreme (II) for(i=1;i<N;i++) for(j=i+1;j<=N;j++) { G+=gcd(i,j); } 推导分析+欧拉函数

    /** 题目:GCD - Extreme (II) 链接:https://vjudge.net/contest/154246#problem/O 题意: for(i=1;i<N;i++) for ...

  7. jmeter-ERROR o.a.j.p.j.c.DataSourceElement: JDBC data source already defined for: 报错原因

    转载自:https://www.cnblogs.com/zhangfeivip/p/9450403.html Jmeter 多个threadgroup 中的配置元件会一次性进行初始化   例如3个th ...

  8. Swift语言中为外部参数设置默认值可变参数常量参数变量参数输入输出参数

    Swift语言中为外部参数设置默认值可变参数常量参数变量参数输入输出参数 7.4.4  为外部参数设置默认值 开发者也可以对外部参数设置默认值.这时,调用的时候,也可以省略参数传递本文选自Swift1 ...

  9. C语言中的未初始化变量的值

    C语言中未初始化的变量的值是0么 全局变量 .静态变量初始值为0局部变量,自动变量初始值随机分配 C语言中,定义局部变量时如果未初始化,则值是随机的,为什么? 定义局部变量,其实就是在栈中通过移动栈指 ...

随机推荐

  1. 【BZOJ】1072: [SCOI2007]排列perm(状压dp+特殊的技巧)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1072 首先无限膜拜题解orz表示只会暴力orz 数据那么小我竟然想不到状压! orz 这种题可以取模 ...

  2. 用css制作星级评分

    Step 1: XHTML <ul class="star-rating">       <li><a href="#" titl ...

  3. 复习及总结--.Net线程篇(4)

    这里要说的就是多线程的锁的问题了 锁:作用在于实现线程间的同步问题,最典型的是售票问题 1,InterLocked 提供的都是静态方法,用来同步对多个共享变量的访问,包括以原子方式递增,递减,比较和替 ...

  4. asp.net页面生命周期总结

    //页面请求-判断是否开始声明生命还是通过cache响应用户            //开始-开始声明周期的话,那么就去判断是新的请求还是回发请求,并修改IspostBack属性            ...

  5. 重写equals()方法也要重写hashcode()方法

    如果我们对equals方法进行了重写,建议一定要对hashCode方法重写,以保证相同的对象返回相同的hash值,不同的对象返回不同的hash值.

  6. phpcms 列表页中调用其下的所有子栏目(或特定的子栏目)的方法

    phpcms 列表页中,如何调用其下的所有子栏目(或特定的子栏目),具体的写法如下,感兴趣的朋友可以参考下,希望对大家有所帮助 代码如下: {pc:get sql="select * fro ...

  7. 关于python类型创建、反射(自醒)与反序列化

    一.反序列化漏洞与新式类 在pickle和cPickle以及shelve这三个序列化类中,想要构造反序列化漏洞执行命令或者代码,都需要用到新式类. shelve其实底层就是调用的pickle和cPic ...

  8. 四 Android Studio打包EgretApp (热更新)

    官网教程: http://developer.egret.com/cn/github/egret-docs/Native/native/hotUpdate/index.html 和Eclipse一样, ...

  9. linux下如何启动nginx?

    命令: /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf ........... [root@localhost sbin ...

  10. Java自定义注解的定义与使用

    Java注解 Annotation(注解)是JDK5.0及以后版本引入的.它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查.注解是以‘@注解名’在代码中存在的,根据注解参数的个数,我们可 ...