えムナウ Blog

えムナウ の なすがまま

目次

Blog 利用状況

ニュース


follow mnow at http://twitter.com


えムナウのプログラミングのページ

INETAJ

書庫

日記カテゴリ

ギャラリ

比較と代入の演算子

R・田中一郎が久々にヒットを飛ばしてくれた。

比較と代入の演算子
http://blogs.wankuma.com/rti/archive/2009/04/20/171723.aspx

var i = 1;
var j = 0;
Console.WriteLine((j = i) == i);
比較演算子の左辺は、i と j どちらの値と比較しているのでしょう?

答えは i です。
やっぱ愛だよね~。
Debug バージョン は ldloc.0 dup ldloc.0 ceq と i のコピーと i を比較しています。
Release バージョン は最適化の結果そもそも j が出てきません。w

~~~~~~~~~~~

Debugバージョン。

.method private hidebysig static void  Main(string[] args) cil managed
{
  .entrypoint
  // コード サイズ       18 (0x12)
  .maxstack  2
  .locals init ([0] int32 i,
           [1] int32 j)
  IL_0000:  nop
  IL_0001:  ldc.i4.1
  IL_0002:  stloc.0
  IL_0003:  ldc.i4.0
  IL_0004:  stloc.1
  IL_0005:  ldloc.0
  IL_0006:  dup
  IL_0007:  stloc.1
  IL_0008:  ldloc.0
  IL_0009:  ceq
  IL_000b:  call       void [mscorlib]System.Console::WriteLine(bool)
  IL_0010:  nop
  IL_0011:  ret
} // end of method Program::Main

Releaseバージョン。
.method private hidebysig static void  Main(string[] args) cil managed
{
  .entrypoint
  // コード サイズ       12 (0xc)
  .maxstack  2
  .locals init ([0] int32 i)
  IL_0000:  ldc.i4.1
  IL_0001:  stloc.0
  IL_0002:  ldloc.0
  IL_0003:  ldloc.0
  IL_0004:  ceq
  IL_0006:  call       void [mscorlib]System.Console::WriteLine(bool)
  IL_000b:  ret
} // end of method Program::Main

投稿日時 : 2009年4月20日 15:13

コメントを追加

# re: 比較と代入の演算子 2009/04/20 15:27 R・田中一郎

久々とか言うなw

# [C] 比較も代入も無いです。 2009/04/21 1:13 The beast of halfpace

[C] 比較も代入も無いです。

# [C] 比較も代入も無いです。 2009/04/21 1:25 The beast of halfpace

[C] 比較も代入も無いです。

タイトル
名前
URL
コメント