文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>浅析 byte a += 100 与 byte a = a +100

浅析 byte a += 100 与 byte a = a +100

时间:2010-09-21  来源:greg_echo

在论坛上看到:

byte a=default(byte);

a += 100;

a = a + 100;

语句2可以执行得出结果,而语句3则在编译时出现错误.问语句2与语句3的区别?

显而易见,a += 100;变量a是byte类型,编译器会首先将a转换为int类型,在得出运算结果后,进行转换类型为byte类型。

实际上以上语句相当于:

 

static void Main(string[] args)
{
byte a=default(byte);
a
= (byte)((int)a + 100);

Console.WriteLine(a.ToString());

}

或者:

static void Main(string[] args)
{
byte a=default(byte);
a
= (byte)(a + 100);

Console.WriteLine(a.ToString());
}

用Reflector得到的IL代码为:

 

 

代码
 .method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
.maxstack 2
.locals init (
[
0] uint8 a)
L_0000: nop
L_0001: ldc.i4.0
L_0002: stloc.0
L_0003: ldloc.0
L_0004: ldc.i4.s 100
L_0006: add //进行加法运算
L_0007: conv.u1 //对结果进行类型转换
L_0008: stloc.0
L_0009: ldloca.s a
L_000b: call instance string [mscorlib]System.Byte::ToString()
L_0010: call void [mscorlib]System.Console::WriteLine(string)
L_0015: nop
L_0016: call valuetype [mscorlib]System.ConsoleKeyInfo [mscorlib]System.Console::ReadKey()
L_001b: pop
L_001c: ret
}

PS:小弟菜鸟,写此水人以加深基础,大牛绕过。

 

 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载