编程语言中的++ a和a ++有什么区别?


回答 1:

在编程语言中,这两个称为pre(++ a)和post(a ++)增量语句。

让我给你举个例子,

a = 0,b = 0;

for(i = 0; i <= 5; i ++){//循环5次

printf(“%d”,++ a); //这将显示“ 1 2 3 4 5”

printf(“%d”,b ++); //这将是“ 0 1 2 3 4”

}

在++ a中,值将首先递增,然后赋值

++ a->增量->分配

而在b ++中,将首先分配b值,然后将其递增

a ++->分配->增量


回答 2:

过去,编译器不那么聪明,使用++&-可以帮助编译器生成更好的机器代码。

++ a递增并为您提供值,而++++则为您提供值,然后递增。靠它们本身没有区别,但是它们在表达上是不同的。

自动递增和递减在许多CPU指令集中都很常见,因为它非常有效且易于实现。

堆栈是一种常见的数据结构,但是有两种选择:

int stack [100]; //我的数字堆栈将存储在此处* top =&stack [0]; //每次使用时都会调整堆栈顶部

//方法1:top是将要推送的新内容* top ++ =某些内容; //推入某物,然后递增某物= * -top; //递减然后POP最高值

//方法2:top是将旧东西放入POPPED * ++ top =东西的地方; //递增,然后推入= = top-; // POP然后递减

一些CPU编译器可以将其中一些转换为高效的单指令。

另一个示例是:

如果(-a> 0)转到标签;

可以转换为单个CPU指令,例如

djnz reg1,address;递减寄存器,如果不为零则跳转到地址

但是,CPU可能没有内置指令可用于:

如果(a—> 0)转到标签;

可能会转换成类似

移动reg1,reg2减少reg1test reg2jnz地址

现代的编译器通常会虚拟地“重写”您的代码以利用特殊的CPU指令,因此,除非您使用的是有限的微型微控制器进行编程,否则通常不必担心。


回答 3:

过去,编译器不那么聪明,使用++&-可以帮助编译器生成更好的机器代码。

++ a递增并为您提供值,而++++则为您提供值,然后递增。靠它们本身没有区别,但是它们在表达上是不同的。

自动递增和递减在许多CPU指令集中都很常见,因为它非常有效且易于实现。

堆栈是一种常见的数据结构,但是有两种选择:

int stack [100]; //我的数字堆栈将存储在此处* top =&stack [0]; //每次使用时都会调整堆栈顶部

//方法1:top是将要推送的新内容* top ++ =某些内容; //推入某物,然后递增某物= * -top; //递减然后POP最高值

//方法2:top是将旧东西放入POPPED * ++ top =东西的地方; //递增,然后推入= = top-; // POP然后递减

一些CPU编译器可以将其中一些转换为高效的单指令。

另一个示例是:

如果(-a> 0)转到标签;

可以转换为单个CPU指令,例如

djnz reg1,address;递减寄存器,如果不为零则跳转到地址

但是,CPU可能没有内置指令可用于:

如果(a—> 0)转到标签;

可能会转换成类似

移动reg1,reg2减少reg1test reg2jnz地址

现代的编译器通常会虚拟地“重写”您的代码以利用特殊的CPU指令,因此,除非您使用的是有限的微型微控制器进行编程,否则通常不必担心。