c# - 将整数转换为ulong是否会花费大量时间?

标签 c#

例:

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/

相关文章:

c# - 通过代码添加应用栏(Windows 8.1,C#)

c# - 如何取消订阅此 .NET 事件?

c# - 检查网络上是否存在目录c#

c# - User.Identity.Name 被模拟后返回 null

c# - 在C#应用程序中导入并调用COM dll

c# - 子串分组字符

c# - List<T>.Find(谓词/Lambda)

c# - 正则表达式替换 JSON 结构

c# - 从 C# 到 Java

c# - 如何通过友好名称打开串口?