[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语言中,定义局部变量时如果未初始化,则值是随机的,为什么? 定义局部变量,其实就是在栈中通过移动栈指 ...
随机推荐
- Woody的Python学习笔记3
Python运算符 Python逻辑运算符 and布尔与-假设x为false.x and y返回false,否则它返回y的计算值. or 布尔或-假设x是true,它返回true.否则它返回y的计算值 ...
- aar
aar是一个类似于jar的文件格式.但是他们之间是有区别的.jar:仅仅包含class和清单文件,没有资源文件.aar:包含了class文件和资源文件.说白了就是Android的专属“jar” 将代码 ...
- 88、android 插件开发教程(转载)
http://blog.csdn.net/qq435757399/article/details/46521085 http://blog.csdn.net/t12x3456/article/deta ...
- c++ 利用容器vector动态的定义二维数组
#include <iostream> #include <vector> using namespace std; int main() { int row, column; ...
- hdu1059(多重背包优化)
使用一种二进制的优化, 可以完美的解决这题,<背包九讲>中说的非常好 但是还有一种线性复杂的算法. 应该算是该题很巧妙的解法 ;i++) { ;l--) { ) continue; ;k& ...
- 【黑金原创教程】【TimeQuest】【第四章】内部延迟与其他
声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/al ...
- python基础之2
1.模块 sys模块注意:python文件的文件名一定不能和下面的要导入的模块同名,如:sys_mokuai.py windows下的python3里直接运行: import sys ----- ...
- LeetCode 笔记系列二 Container With Most Water
题目:Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai ...
- Strut2中的标签
Struts2的标签用法和示例 1)s:property标签:property 标签用来输出一个值栈属性的值 示例: 输出 Action 属性 customerId 的值: <s:propert ...
- Android 满屏显示自定义的View,并进行移动
新建一个类,继承View package com.topcrab.mygame; import android.content.Context; import android.graphics.Bit ...