可能重复:
java中的x ++和++ x之间有区别吗?
我正在阅读官方Java教程,我没有区分postfix和前缀(++ x vs x ++).有人能解释一下吗
class T {
public static void main(String args[]) {
int x = 0;
x = x++;
System.out.println(x);
}
}
Run Code Online (Sandbox Code Playgroud) 这个问题只是好奇心:我想知道一些人int x在行之后会有什么价值x += ++x
所以我试过了:
int x=10;
x+=++x;
System.out.println(x);
Run Code Online (Sandbox Code Playgroud)
它打印出来:
21
Run Code Online (Sandbox Code Playgroud)
在使用其他值进行一些测试后,它似乎等于x = 2x + 1.为什么?此行是否由编译器解释为字节操作?(顺便说一下,x + = x ++似乎等于x = 2x).
我不认为这是我在项目中使用的东西,但我很想知道为什么我得到这个结果.
谢谢你的任何解释或提示
编辑:首先,感谢您的回答
我知道+=操作员的工作方式,以及x++和++x,但由于某种原因,(完全逻辑和明显的)结果对我来说似乎很奇怪我应该已经考虑过了,抱歉你的时间!
我有一些代码:
int m = 4;
int result = 3 * (++m);
Run Code Online (Sandbox Code Playgroud)
和
int m = 4;
int result = 3 * (m++);
Run Code Online (Sandbox Code Playgroud)
执行m为5后,结果在第一种情况下为15,但在第二种情况下,m也为5,但结果为12.为什么会这样?它不应该是至少相同的行为?
我特别谈到优先规则.我一直认为这些规则表明,parantheses比一元运算符具有更高的优先级.那么为什么不首先评估这些问题中的表达呢?
我搜索了x ++ vs ++ x,我在这里找到了一个很好的答案,所以我决定看看gcc的汇编输出,看看x ++和++ x是如何实现的:
main(){int s = 0; ++ S; 返回0; }
编译示例:
gcc mul.c -masm = intel -o mul.asm
++ s的输出:
.file "mul.c"
.intel_syntax
.text
.p2align 4,,15
.globl main
.type main, @function
main:
lea %ecx, [%esp+4]
and %esp, -16
push DWORD PTR [%ecx-4]
push %ebp
mov %ebp, %esp
push %ecx
sub %esp, 16
mov DWORD PTR [%ebp-8], 0
add DWORD PTR [%ebp-8], 1
mov %eax, 0
add %esp, 16
pop %ecx
pop %ebp …Run Code Online (Sandbox Code Playgroud) 这可能是一个愚蠢的问题,但我无法弄清楚。它与n ++和++ n之间的差异有关(我以为我理解但显然不是)。
#include <stdio.h>
#include <math.h>
long algorithmA(int n);
long algorithmB(int n);
int main(){
long A, B;
A = B = 0;
int n = 1;
while(A >= B){
A = algorithmA(n);
B = algorithmB(n);
n++;
}
printf("At n = %d, Algorithm A performs in %ld seconds & "
"Algorithm B performs in %ld seconds.", n, A, B);
}
long algorithmA(int n){
return pow(n,4) * 86400 * 4;
}
long algorithmB(int n){
return pow(3,n);
}
Run Code Online (Sandbox Code Playgroud)
在这里您可能会告诉我,我正在尝试看算法A在什么时候优于算法B。功课中的功能和时间单位是给我的。
无论如何,我一直认为在while循环结束时“ ++”的顺序无关紧要。但是,如果我使用++ n而不是n …
有人可以解释为什么以下代码的输出为1.
int i = 1;
i=i--;
System.out.println(i); // 1
Run Code Online (Sandbox Code Playgroud)