【问题标题】:Trailing Ampersand in VB.NET hexadecimal?VB.NET十六进制中的尾随与号?
【发布时间】:2011-10-10 21:16:27
【问题描述】:

这对人们来说应该很容易。谷歌除了链接到一个简介的内容农场外一无所有,而且那是用蹩脚的英语写的。因此,让我们在这里清理它,它将永远被埋葬。

VB 十六进制数字后面的 & 号是干什么用的?我读过它强制转换为 Int32,因为 VB 有机会尝试将其存储为 Int16。这对我来说很有意义。但是我没有从简介中得到的部分是始终将尾随的&符号用于位掩码、标志、枚举等。显然,它与覆盖 VB 对内部使用有符号数字的迷恋有关,这可能导致比较奇怪的结果。

所以为了简单起见,VB.Net 十六进制数字的规则是什么,有和没有尾随 & 符号?请包括在位掩码/标志等情况下的具体用法,以及如何使用它来强制签名与未签名。

请不要使用 C# :)

【问题讨论】:

  • 这是一个Type Character。最近这里还有一个问题about them
  • 啊,我总是忘记那些。就像 C 中的“UL”一样。您应该将此作为答案发布。
  • @kumba - 很高兴看到您正在查看的示例。
  • @dbasnett:并不是所有的事情都需要一个例子,我觉得我给了足够多的描述以供人们想象。但是,&HFFF0& 就是一个例子。
  • @kumba 它永远不会受到伤害。这是两个完全不同的东西。 Dim i As Integer = &HFFFF0& 和 Dim l As Long = &HFFFF0&

标签: vb.net hex


【解决方案1】:

除非类型明确指定为 UInt32、Int64 或 UInt64,否则 Vb.net 会将 0x80000000-0xFFFFFFFF 范围内的“&h”符号十六进制常量视为负数。如果数字是在“&”后面精确地用八位数字写的,这种行为可能是可以理解的,但由于某种原因,我无法理解,即使数字是用前导零写的,vb.net 也会这样做。在当前版本的 VB 中,可以通过使用“&”后缀 (Int64)、“L” (Int64)、“UL” (UInt64) 或“UI” (UInt32) 的后缀来强制正确评估数字。在早期版本的 VB 中,“问题范围”是 0x8000-0xFFFF,并且强制正确评估该范围内的数字(作为 32 位整数,然后称为“Long”)的唯一方法是尾随和号。

【讨论】:

    【解决方案2】:

    Visual Basic 有Type Characters 的概念。这些可以用来修改变量声明和文字,尽管我不建议在变量声明中使用它们——现在大多数开发人员都更熟悉As。例如。以下声明是等价的:

    Dim X&
    Dim X As Long
    

    但就我个人而言,我发现第二个更具可读性。如果我看到第一个,我实际上必须访问上面的链接,或者使用 Intellisense 来确定变量是什么(如果查看纸上的代码则不好)。

    【讨论】:

    • 是的,当我看到非十进制数字上的文字时,我想我只是切换到另一种模式。您以 & 符号开头 Hex,因此尾随 & 符号可以让您的大脑发挥作用。
    猜你喜欢
    • 1970-01-01
    • 2014-07-03
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 2010-11-23
    • 2011-04-14
    • 2013-05-28
    • 1970-01-01
    相关资源
    最近更新 更多