我一直使用
(ulong) 1
来表示 64 位数据类型中的 1 位。我想知道 (ulong) 1
是否会进行某种类型转换并且比 1ul
花费更多时间。
只是好奇这是否有什么不同。我认为它们的性能完全相同。这是正确的,还是
(ulong) 1
实际上更慢?
不,当您使用编译时常量和内置数字转换(即
(ulong) 1
)进行强制转换时,不会发生运行时类型转换,因为编译器可以处理此类事情,并且两种方法都应产生相同的IL/ASM。例如:
var x = 1ul;
var y = (ulong)1;
Console.WriteLine(x);
Console.WriteLine(y);
将产生相同的IL:
.maxstack 1
.entrypoint
.locals init (
[0] uint64 x,
[1] uint64 y
)
IL_0000: ldc.i4.1
IL_0001: conv.i8
IL_0002: stloc.0
IL_0003: ldc.i4.1
IL_0004: conv.i8
IL_0005: stloc.1
IL_0006: ldloc.0
IL_0007: call void [System.Console]System.Console::WriteLine(uint64)
IL_000c: nop
IL_000d: ldloc.1
IL_000e: call void [System.Console]System.Console::WriteLine(uint64)
IL_0013: nop
IL_0014: ret