【问题标题】:How to set a large constant with bitwise operation on ULong?如何在 ULong 上通过按位运算设置大常数?
【发布时间】:2015-05-23 00:00:19
【问题描述】:

这很好用:

Public Const test As ULong = 1 << 30

这不太好用:

Public Const test As ULong = 1 << 31

它会产生这个错误:

常量表达式在“ULong”类型中不可表示

如何让它发挥作用?

这确实有效:

Public Const test As Long = 1 << 31

但我必须使用 ULong

【问题讨论】:

    标签: vb.net bit-manipulation


    【解决方案1】:

    您无法使用 Long 数据类型移动 1 &lt;&lt; 31,因此您会收到此错误。

    但是,这是因为 1 作为整数文字,被视为 Int32,这是默认的整数文字。

    您应该通过将其定义为来解决此问题:

    Public Const test As ULong = 1UL << 30
    Public Const test2 As ULong = 1UL << 31
    

    UL 标志表示将 1 设为无符号长整数。 See Type characters for details.

    【讨论】:

    • @Fredou:我追求质量,而不是速度。首先不应该让某事成为答案 - 它应该是正确的,并很好地解释问题......阅读常见问题解答 - 它建议在标记答案之前等待几个小时,因为您应该选择“最佳”答案,不是最快的答案。
    • @Reed,对我来说,在这种情况下,两个答案都是相等的,因为两者都给出了 UL 关键字和我必须明确说的相同解释:这个数字是ULong,不是别的。
    • @Fredou:哦,太好了。我不是说要切换 - 只是说“更快并不是更好”......
    【解决方案2】:

    尝试以下方法:

    Public Const test As ULong = 1UL << 31 
    

    您需要明确告诉编译器您正在对 ULong 执行操作。

    C# 等效的工作原理:

    public const ulong test  = 1UL << 31;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-23
      • 1970-01-01
      • 2012-10-27
      • 2011-06-23
      相关资源
      最近更新 更多