为了和一位同事打赌,我想知道VB6是否原生支持任何无符号数据类型。
我相信答案是“否”,但我似乎找不到任何官方文件证实这一点。一个指向 Microsoft 文档的简单链接就是一个可以接受的答案;关于为什么不支持此类类型的历史理由将是额外的好处。
正如 Kris 所说,除
Byte
数据类型外,它们不受支持,该数据类型仅作为无符号可用,如以下数据类型列表所示:数据类型摘要
页面提到了VBA,但也提到了Visual Studio 6.0,支持的数据类型是相同的。
我认为您不会找到官方文档说明为什么他们不添加无符号数据类型,因为这通常是错误的方式,因为它可能不是“为什么我们不应该支持这个”的情况因为“是否值得付出额外的努力来添加这个”。
编辑提及 MarkJ 指出的
Byte
数据类型的例外情况。
唯一的无符号整数类型是 Byte。
可以选择将十六进制值传递到 Long 类型,只要符号位不是值的一部分,该类型就会存储为无符号。例如,
&HFFFF = -1
but &HFFFF& = 65535
请注意,这些 16 位值被传递为 Long 类型,即 32 位。所以符号位保持不变。但如果你需要 32 位,一个建议是使用 Double 类型,之前有人提到过。
考虑到一般情况下对无符号类型的需求,Unsigned Long 将是 32 位二进制,而 Byte 则只有 8 位。尝试通过串行端口使用字节类型写入 24 位寄存器..:) 我的看法是,在 VBA 中,符号位就像位逻辑中的碎片一样..
无论如何,我希望这对某人有帮助。
干杯,
马萨诸塞州诺伍德
不支持。
有关模拟它们的一些好信息:http://www.vbforums.com/showthread.php?t=578430
不支持 VB6,它是按照 VB.NET link 中的说明添加的。
我在 github 上的代码可能有用:
github.com/RZulu54/VBA7_ULongLong
使用 VBA7(64/32 位 MsOffice)或 VB6(Visual Basic 6)模拟 ULongLong 64 位无符号整数
对于 32 位 MsOffice VBA 或 VB6,我们可以使用两个长整型 32 位有符号整数组合成新的数据类型 TBit64。 这需要基本位运算的函数,如 AND、OR、XOR、NOT。
对于 64 位 MsOffice VBA7,我们可以使用新的 64 位有符号整数数据类型 LongLong。 AND、OR、XOR、NOT 等基本位运算不需要额外的函数,可以直接使用。
两种变体可用的功能有: SetBit64、ClearBit64、ShiftLeft64、ShiftRight64、PopCnt64(设置的位数)、 Lsb64(最左边位的位置)、Rsb64(最左边位的位置)等等。
Ms-Excel 文件 VBA7.xlsm 展示了如何在 32/64 位 MsOffice 中使用这些函数。 对于 64 位 Excel,还有一个简单的国际象棋演示如何使用 64 位棋盘逻辑。