似乎许多语言,包括 C/C++ 和 Java,都具有逻辑非(将 0 转换为 1,反之亦然)和按位非(按位取反又称为补码)。在 Visual Basic 中,Not
只是按位,而 True
的值为 -1。 VB 以这种方式实现有什么特殊原因吗?
如果它是 BASIC 遗留下来的一些痕迹,那么它是否代表了 1964 年 (BASIC) 和后来的语言(如 C (1972))时代之间思想的变化?
最佳答案
有历史,BASIC 也没有区分逻辑运算符和按位 AND 和 OR 运算符。 Not
在 VB.NET 中完成这两项工作,如果操作数是 bool 值,则它是逻辑 NOT,如果操作数是数字,则它是按位求反。
True 转换为 -1 主要是为了允许 And
和 Or
运算符生成逻辑表达式结果。因此,假设 True And 2
仍然为 true 并且匹配 True And CBool(2)
,如果 True 转换为 1,则该方法将不起作用。缺少的短路行为是旧 VB 版本中相当严重的缺陷,并激发了 AndAlso 和 OrElse 的添加。
关于vb.net - 为什么 Visual Basic 中 True 存储为 -1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41193938/