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

代码如下:

 #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. php计算数组相同值出现次数的代码(array_count_values)

    php计算数组相同值出现次数,可以使用php自带函数array_count_values : 说明 array array_count_values ( array $input )array_cou ...

  2. bootstrap基础学习六篇

    bootstrap按钮 类 描述 .btn 为按钮添加基本样式 .btn-default 默认/标准按钮 .btn-primary 原始按钮样式(未被操作) .btn-success 表示成功的动作 ...

  3. 【Python】python-memory-management

    http://deeplearning.net/software/theano/tutorial/python-memory-management.html#python-memory-managem ...

  4. SQL的学习

    1. 判断表达式的值是否为空在表达式后面接 IS NULL 或 IS NOT NULL 可以判断表达式是否为空或不为空 2. 把数据库中的数据导出成可执行的SQL语句对数据库点击右键一次选择 任务-- ...

  5. WebGL中的OpenGL着色器语言

    在webgl中,调用了OpenGL-ES-2.0的API,而在OpenGL-ES专为嵌入式设备设计,其和其它设备一样,都是使用GLSL(GL Shading Language)来编写片段程序并执行于G ...

  6. [黑金原创教程] FPGA那些事儿《设计篇 II》- 图像处理前夕·续

    简介 一本为入门图像处理的入门书,另外还教你徒手搭建平台(片上系统),内容请看目录. 注意 为了达到最好的实验的结果,请准备以下硬件. AX301开发板, OV7670摄像模块, VGA接口显示器, ...

  7. PHP获取当前日期和时间格式化方法

    使用函式 date() 实现 <?php echo $showtime=date("Y-m-d H:i:s");?> 显示的格式: 年-月-日 小时:分钟:妙 相关时间 ...

  8. MySQL5.7压缩包安装图文教程

    MySQL5.7压缩包安装图文教程 一.下载网址:https://dev.mysql.com/downloads/ 选择5.7版本 二.解压 下载完成后解压,解压后如下(zip是免安装的,解压后配置成 ...

  9. 170406、用uid分库,uname(用户名)上的查询怎么办

    [缘起] 用户中心是几乎每一个公司必备的基础服务,用户注册.登录.信息查询与修改都离不开用户中心. 当数据量越来越大时,需要多用户中心进行水平切分.最常见的水平切分方式,按照uid取模分库: 通过ui ...

  10. 妙味,结构化模块化 整站开发my100du

    ********************************************************************* 重要:重新审视的相关知识 /* 妙味官网:www.miaov ...