[C语言]小记q = (++j) + (++j) + (++j)的值
根据不同的编译器,生产的代码不一样,导致的结果也会不一样。
代码如下:
#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)的值的更多相关文章
- j++与++j
(j++)+(++j)+(++j) 核心部分汇编代码 执行顺序j原始值为5,存放在栈的ebp-4中;q无初始值,存放在栈的ebp-8中先执行一次j自增赋值++j ;j=6执行第一个加法运算;值存放在C ...
- for循环j = j++ 和 j = ++j
package com.test.forname; public class TestForName { public static void main(String[] args) throws E ...
- 存在使i > j || i <= j不成立的数吗?
存在使i > j || i <= j不成立的数吗? 咋一看有点晕!一个数既不能大于也不能小于等于另一个数?那是什么数?答案是”非数“ 例子如下:‘ if(Double.NaN>Flo ...
- 给出一个数组A,找出一对 (i, j)使得A[i] <= A[j] (i < j)并且j-i最大
题目:给出一个数组A,找出一对 (i, j)使得A[i] <= A[j] (i <= j)并且j-i最大 ,若有多个这样的位置对,返回i最小的那一对. 最直接的想法就是对于每一个 i 从数 ...
- hdoj 2601(判断N=i*j+i+j)
Problem E Time Limit : 6000/3000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Sub ...
- 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 ...
- 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 ...
- Swift语言中为外部参数设置默认值可变参数常量参数变量参数输入输出参数
Swift语言中为外部参数设置默认值可变参数常量参数变量参数输入输出参数 7.4.4 为外部参数设置默认值 开发者也可以对外部参数设置默认值.这时,调用的时候,也可以省略参数传递本文选自Swift1 ...
- C语言中的未初始化变量的值
C语言中未初始化的变量的值是0么 全局变量 .静态变量初始值为0局部变量,自动变量初始值随机分配 C语言中,定义局部变量时如果未初始化,则值是随机的,为什么? 定义局部变量,其实就是在栈中通过移动栈指 ...
随机推荐
- 【BZOJ】1046: [HAOI2007]上升序列(dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=1046 一直看错题....................... 这是要求位置的字典序啊QQQAAAQ ...
- XML Publiser For Excel Template
1.XML Publisher定义数据 2.XML Publisher定义模板 模板类型选择Microsoft Excel,默认输出类型选择Excel,上传.xls模板 3.定义并发程序 4.定义请求 ...
- php 快速读取文件夹下文件列表
在读取某个文件夹下的内容的时候 以前是使用 opendir readdir结合while循环过滤 . ..当前文件夹和父文件夹来操作的. 代码如下: 然后偶然发现了有scandir函数 可以扫描文件夹 ...
- FragmentStatePagerAdapter写法
为了节省资源,分批加载数据//适配器class TabLayoutViewPagerAdapter extends FragmentStatePagerAdapter { public TabLayo ...
- ios8推送问题
博文转载至 http://blog.csdn.net/cerastes/article/details/39546625 ios8push推送通知适配 ios8推送问题 registerForRem ...
- 解决 Unable to load native-hadoop library for your platform
安装hadoop启动之后总有警告:Unable to load native-hadoop library for your platform... using builtin-java classe ...
- excel如何将一个工作薄中的工作表生成独立的工作薄
excel如何将一个工作薄中的工作表生成独立的工作薄 '用vba代码 Sub 另存所有工作表为工作簿() Dim sht As Worksheet Application.ScreenUpdatin ...
- iOS 界面翻转切换动画
[UIView beginAnimations:nil context:NULL]; [UIView setAnimationCurve:UIViewAnimationCurveLinear]; [ ...
- datatables如何把列设置成hidden隐藏域?
官网:https://datatables.net/reference/option/设置: visible: false如下: <!DOCTYPE html><html>&l ...
- Spring---Bean的继承与依赖
Spring 允许继承 bean 的配置(通过Bean的parent属性来指定,例如parent=”teacher“), 被继承的 bean 称为父 bean. 继承这个父 Bean 的 Bean ...