例:
ulong a = // some value
if(a == 0)
// do something
在执行测试时,是否必须将
a == 0
的值0从其默认值转换为ulong。这种转换会花费很多时间吗?测试
a == 0UL
会花费更少的时间吗?我正在执行一个时间紧迫的项目,因此每次操作少都可以。
最佳答案
长话短说,与较小位宽的常量进行比较不会对运行时产生影响。
这是长话不说的:
当您与常量进行比较时,编译器将在编译时扩大常量,因此不会对运行时产生影响。您不必显式指定常量大小,因为编译器足够聪明,可以找出要使用的正确大小。将double
与浮点常量进行比较也是如此。
与变量进行比较时,编译器会生成代码以在运行时扩大该值。根据所涉及的类型和平台(例如32位平台上的64位类型),这可能会花费几个周期。通常,尽管操作相当快。
例如,将有符号的32位整数变量从堆栈加载到无符号的64位寄存器中是在x64平台上的一条指令:
movsx rax, dword ptr[rsp+<offset>]
在x86平台上,需要花费更多的操作才能通过两个32位寄存器加载和符号扩展该值,并且需要花点时间进行操作……这不足为奇。
关于c# - 将整数转换为ulong是否会花费大量时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18390990/