一个计算机中的计算程序,你能理解它的运算顺序吗?根据它的程序,请你写出所有运算步骤

一个计算机中的计算程序,你能理解它的运算顺序吗?根据它的程序,请你写出所有运算步骤,第1张

首先我认为这个流程图是你自己画的,因为很不规范。

我理解的运算顺序是:输入的数据减去1,然后除以负2,最后与0比较大小,大于0则输出结果,小于零则返回,要求重新输入数据。大于0所用的框应该是菱形吧?!

你根据这个算结果吧。当然,如果我错误的理解了你的意思,那么就不好意思了!~

见谅……

1、这个涉及到函数的调用约定

运行结果跟编译器有一定的关系,不同的编译器参数的入栈的顺序不同

一般的编译器是从右到左

如fun(a,b)这个函数调用,是先计算参数b,入栈,再计算参数a,入栈

2、printf("%d

%d",

a++,++a)

//先计算++a,先自增,a的值变为2,将2入栈

再来计算a++,将a的值2入栈,再使a自增,a的值变为3

printf("

%d\n",a)

//a的值已经变为3了

3、printf(%d

%d",

++a.a++)//先计算a++,将a的值1入栈,再使a自增,a的值变为2,再来计算++a,先自增,a的值为3,将3入栈,输出3

1

printf("

%d\n",a)

//输出3

4、三种调用约定:

__stdcall调用约定。两者实质上是一致的,即函数的参数自右向左通过栈传递,被调用的函数在返回前清理传送参数的内存栈,但不同的是函数名的修饰部分(关于函数名的修饰部分在后面将详细说明)。

C调用约定(即用__cdecl关键字说明)和__stdcall调用约定有所不同,虽然参数传送方面是一样的,但对于传送参数的内存栈却是由调用者来维护的(也正因为如此,实现可变参数的函数只能使用该调用约定),另外,在函数名修饰约定方面也有所不同。

__fastcall调用约定是“人”如其名,它的主要特点就是快,因为它是通过寄存器来传送参数的(实际上,它用CX和EDX传送前两个双字或更小的参数,剩下的参数仍旧自右向左压栈传送,被调用的函数在返回前清理传送参数的内存栈),在函数名修饰约定方面,它和前两者均不同。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7871615.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存