111,098
社区成员




class Program
{
static void Main(string[] args)
{
int x = 0;
for(int i=0; i<5; i++) {
x =x++;
}
Console.WriteLine(x);
Console.Read();
}
}
我好奇的是,“x=x++” 应该是x++先取x的值再计算+1,但是为什么赋值之后x并没有自增1.
static void Main(string[] args)
{
int i = 1;
//int k = 0;
Console.WriteLine("i="+i);
i = i++;
//Console.WriteLine("k=" + k);
Console.WriteLine("i="+i);
Console.WriteLine();
int j = 1;
Console.WriteLine("j=" + j);
j++;
Console.WriteLine("j=" + j);
Console.Read();
}
下面是反汇编得到的
i = i++;
0000007d mov eax,dword ptr [ebp-40h]
00000080 mov dword ptr [ebp-50h],eax
00000083 inc dword ptr [ebp-40h]
00000086 mov eax,dword ptr [ebp-50h]
00000089 mov dword ptr [ebp-40h],eax
j++;
00000111 inc dword ptr [ebp-44h]
i=i++大概意思是说
i先被存到了内存上,当你i=i++的时候
计算机先算的是i++
把i从内存读到了cpu的ecx寄存器上
然后把它加一
就是说他们把i和i+1都存入了cpu
之后又重新放入内存
不过放的地方是一样的
先放的i+1后放的i
所以i就不变了
后悔当初《汇编语言》这本书没看完。int i = 1;
int j = i + i++;
Console.WriteLine(j);
Console.Read();
这个结果是2,而不是3。i=i++;
那i就还是1。
如果不赋值直接用
i++;
那i就是2了 int temp = 1;
temp = temp++;
temp++;
int b = temp;
居然是真的,
表示还真是才知道这个。
中间那个 temp = temp++; 后面的不算自增?
难道是看做一种类似lambda的函数类型?