浅析 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:小弟菜鸟,写此水人以加深基础,大牛绕过。
相关阅读 更多 +