我已经准备好在'w‘下为tWilight专区怪异提交这篇文章!
我有一个用户控件类,并在定义中包含以下内容
Private Const m_def_FillColor As Long = &H99FF
然后:
Private Sub UserControl_InitProperties()
m_FillColor = m_def_FillColor
现在,如果我在“即时”窗口中进行调查:
? m_def_FillColor
-26113
我想是的。好的。这可能就是为什么当我尝试使用它作为颜色时出现错误的原因。我检查十六进制值并得到:
? hex( m_def_FillColor )
FFFF99FF
很奇怪,对吧?
因此,我在即时窗口中检查了&h99ff的值:
? &h99ff
-26113
嗯..。很奇怪,对吧?
我尝试强制强制转换,并明确表示转换:
? clng( &h000099ff )
-26113
为了“傻笑”,我在这两者之间做了一个转换:
? hex( clng( &h000099ff ) )
FFFF99FF
只是为了好玩,我检查了一个未转换的演员:
? hex( &h000099ff )
99FF
别买了,以防万一。我想,我要看看实际的十进制值是怎么回事:
? hex( clng( 39423 ) )
99FF
无论如何。我晚上关机,我想我的记忆有问题,只需要重新启动,我已经尝试重新启动项目,所以这不是问题所在。
无论如何,有没有人见过这样的问题?
我希望重启和睡个好觉就能治好它..
但是..。我是不是在做一些明显的和/或无知的事情,完全遗漏了什么?
我的目标是将值&h000099ff插入到一个长值中。我对Visual Basic编程很在行,这是我已经做过数十亿次的事情,所以我只想确保我没有遗漏一些显而易见的东西!
晚上好,提前感谢你的帮助..奇怪..。
我认为是记忆问题造成的。但还是不确定。
发布于 2015-01-27 17:22:34
在数字末尾添加一个&
'1 form with:
' 1 command button : name=Command1
Option Explicit
Private Const A As Long = &H99FF
Private Const B As Long = &H99FF&
Private Sub Command1_Click()
Print "A : " & CStr(A)
Print "B : " & CStr(B)
End Sub
发布于 2019-05-16 08:31:27
您的问题是由于缺乏对2的补码整数格式的理解,该格式用于在现代计算机上存储整数。
请阅读Two's_complement,特别是关于标志扩展的部分。
VB只有带符号的整数变量,因此指定&H99FF被解释为16位有符号的2的补码整数,并且因为设置了最高有效位,所以它表示一个负数,十进制-26113。要将其转换为长整型(32位)并获得相同的有符号整数值,必须将其符号扩展为-26113的32位2的补码表示&HFFFF99FF
向常量添加尾随的&告诉VB &H99FF&已经是一个长(32位)值,因此在分配给一个长变量时不需要任何符号扩展转换。
发布于 2015-01-27 16:53:56
大多数编程语言只有带符号整数的概念。
只需给它赋值&h000099ff,它就会工作。但如果你读了它,它将被视为签名。
你调用的函数只关心比特,而不是VB6如何解释它们。
为什么要把常量赋给一个变量呢?常量和字符串字面量(它们的结尾是一样的)很快。
此外,对于颜色来说,这似乎是一个有趣的值。
https://stackoverflow.com/questions/28162693
复制相似问题