Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Addition - fun - not what I thought
Message
From
05/07/2009 09:10:58
 
 
To
All
General information
Forum:
ASP.NET
Category:
Coding, syntax and commands
Title:
Addition - fun - not what I thought
Environment versions
Environment:
C# 3.0
Miscellaneous
Thread ID:
01410144
Message ID:
01410144
Views:
152
Following code

I thought I would get 9 but I get 7
	int i = 1;

	i += (i += 2) + 3;

	Console.WriteLine("{0}", i);
	Console.ReadLine();
Reason:
The value of i is loaded at the beginning of the operation and not at the end just before the addition is done
  .locals init ([0] int32 i)
  IL_0000:  nop
  IL_0001:  ldc.i4.1
  IL_0002:  stloc.0   
  IL_0003:  ldloc.0    // load i  for the first +=
  IL_0004:  ldloc.0   // load i   for the second +=
  IL_0005:  ldc.i4.2 
  IL_0006:  add     
  IL_0007:  dup
  IL_0008:  stloc.0   // this is (i += 2) that is stored in i
  IL_0009:  ldc.i4.3
  IL_000a:  add
  IL_000b:  add    // this is the original value of i, loaded in IL_0003
  IL_000c:  stloc.0  // i is overwritten
But this gives 9
	int i = 1;

	i += 2;
	i += i + 3;
IL_0000:  nop
  IL_0001:  ldc.i4.1
  IL_0002:  stloc.0
  IL_0003:  ldloc.0
  IL_0004:  ldc.i4.2
  IL_0005:  add
  IL_0006:  stloc.0
  IL_0007:  ldloc.0
  IL_0008:  ldloc.0
  IL_0009:  ldc.i4.3
  IL_000a:  add
  IL_000b:  add
  IL_000c:  stloc.0
Gregory
Next
Reply
Map
View

Click here to load this message in the networking platform