[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语言中,定义局部变量时如果未初始化,则值是随机的,为什么? 定义局部变量,其实就是在栈中通过移动栈指 ...
随机推荐
- 事务基础知识-->Spring事务管理
Spring虽然提供了灵活方便的事务管理功能,但这些功能都是基于底层数据库本身的事务处理机制工作的.要深入了解Spring的事务管理和配置,有必要先对数据库事务的基础知识进行学习. 何为数据库事务 “ ...
- 剑指 offer set 17 判断一棵树是否是平衡树
总结 1. 书上给出一个简洁代码, 说是会重复遍历. 2. 框架相同, 可以写出下面的代码 class Solution { public: bool ans; int getHeight(TreeN ...
- Python学习笔记6-字典Dict
Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度. >>> person ...
- Linux命令之乐--find
find是命令行工具箱中最棒的命令之一. 列出当前目录及其子目录中的文件和文件夹. [root@LAMP WebRoot]# find . -print../index.jsp./upload.jsp ...
- mybatis 控制台打印出来的sql 执行结果为空 但是将sql放到mysql执行有数据
mybatis中的sql如下 select airln_Cd airlnCd,city_coordinate_j cityCoordinateJ,city_coordinate_w cityCoord ...
- Json数组基础知识
1.对象是一个无序的“‘名称/值’对”集合. (1)一个对象以“{”(左括号)开始,“}”(右括号)结束. (2)每个“名称”后跟一个“:”(冒号): (3)“‘名称/值’ 对”之间使用“,”(逗号) ...
- std::ostringstream
ostringstream是C++的一个字符集操作模板类,定义在sstream.h头文件中.ostringstream类通常用于执行C风格的串流的输出操作,格式化字符串,避免申请大量的缓冲区,替代sp ...
- 算法分析中最常用的几种排序算法(插入排序、希尔排序、冒泡排序、选择排序、快速排序,归并排序)C 语言版
每次开始动手写算法,都是先把插入排序,冒泡排序写一遍,十次有九次是重复的,所以这次下定决心,将所有常规的排序算法写了一遍,以便日后熟悉. 以下代码总用一个main函数和一个自定义的CommonFunc ...
- js根据数组对象中某个元素合并数组
一个数组,根据数组中某个元素,合并数组 // 需要被合并的数组,把Index相同的数组合并 const arr = [{id:0,name:'张三'}, {id:0,name:'李四'}, {id:1 ...
- Python全栈day28(描述符应用)
描述符的使用 python是弱类型语言,及参数的赋值没有类型限制,下面通过描述符机制来实现类型限制功能 描述符应用1.py class Typed: def __get__(self, instanc ...