将布尔值转换为整数,对于true返回-1?

17 浏览
0 Comments

将布尔值转换为整数,对于true返回-1?

我正在处理一些VB.NET代码,它似乎使用CInt(myBoolean)将布尔值转换为整数。奇怪的是,如果值为真,它返回-1。例如:

CInt(True) // 返回-1

CInt(False) // 返回0

其他语言中是否常见这种情况?

我原以为布尔值为真时应该是1,为假时应该是0。另外,是否有办法使Visual Basic将真赋值为1而不是赋值为-1?

0
0 Comments

在这个问题中,出现这种情况可能会让人感到困惑,而且我不知道还有其他类似的例子。

《数据类型故障排除(Visual Basic)》指定了这种行为,并附带了一个“不要这样做,好吗”的备注。请注意下面的说明:

在框架中的转换

System命名空间中的Convert类的ToInt32方法将True转换为+1。

如果您必须将布尔值转换为数值数据类型,请小心使用哪种转换方法。

根据这些内容,我们可以得出这个问题出现的原因是:在将布尔值转换为整数时,使用了错误的转换方法。

那么,解决方法就是要小心选择正确的转换方法。根据文档中给出的信息,我们可以使用Convert类的ToInt32方法将布尔值转换为整数。下面是一个示例代码:

bool myBool = true;
int myInt = Convert.ToInt32(myBool);

通过使用正确的转换方法,我们可以将布尔值转换为正确的整数值,而不是错误的-1。

0
0 Comments

在VB.NET中,将布尔值转换为整数会返回-1而不是预期的1。这个问题的原因是VB.NET中的Int()函数的行为在某个时候被默默地改变了。在VB/A中,该函数返回-1。

解决此问题的方法是使用以下代码:

Dim i As Integer = CInt(Int(False))

这将返回0。

Dim i As Integer = CInt(Int(True))

这将返回1。

需要注意的是,这个问题只在VB.NET中出现,而不是VBA。虽然它们相似,但可能是这个问题在你的情况下无效的原因。根据12年前的帖子,原帖作者使用的是VB.NET,而不是VBA,这可能是为什么你在使用VBA时无法解决这个问题的原因。

0
0 Comments

将一个布尔值转换为整数,对于true返回-1的原因是因为在Visual Basic中,布尔类型被存储为一个16位有符号整数。布尔类型的True被定义为-1,即16个二进制位都是1,而False被定义为0,即16个二进制位都是0。这个定义与早期的Microsoft BASIC实现以及当时CPU指令的特性一致。因此,在进行布尔类型与整数类型的转换时,True会被转换为-1。

解决这个问题的方法是不依赖于True或False具有特定整数值,除非绝对必要。尽量避免将布尔类型直接转换为整数类型,而是使用布尔类型进行逻辑运算或者使用条件语句来处理布尔值。如果确实需要将布尔类型转换为整数类型,可以使用条件运算符或者if语句来手动转换为期望的整数值。

总之,在编程中,应尽量避免依赖于特定的布尔值与整数值之间的关系,因为这些关系可能因不同的编程语言或实现而有所不同。

0