加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

vb.net – 为什么Visual Basic中的True存储为-1?

发布时间:2020-12-17 07:23:18 所属栏目:百科 来源:网络整理
导读:看起来很多语言,包括C/C++和 Java,都有逻辑Not(转换0到1,反之亦然)和Bitwise Not(按位反转AKA的补码).在Visual Basic中,Not不是简单的按位,而True的值为-1. VB是以这种方式实现的吗? 如果它是从BASIC继承的一些遗迹,那么它是否代表了1964年(BASIC)与C(1972)
看起来很多语言,包括C/C++和 Java,都有逻辑Not(转换0到1,反之亦然)和Bitwise Not(按位反转AKA的补码).在Visual Basic中,Not不是简单的按位,而True的值为-1. VB是以这种方式实现的吗?

如果它是从BASIC继承的一些遗迹,那么它是否代表了1964年(BASIC)与C(1972)等后期语言时代的思维变化?

解决方法

这只是猜测,但为了更简单的实现和零/非零逻辑的灵活性,可能选择逐位的AND / OR / NOT(在8位BASIC实现的时代).

你不能让语言变得太复杂,因为这回到了“家庭计算机”时代,当时CPU周期以千赫兹为单位,内存以千字节为单位,存储设备则罕见或昂贵或具有主要性(如纸带读取器或匆忙改编的录音机/播放器).

Dartmouth BASIC(这一切的开头,c 1964,http://bitsavers.trailing-edge.com/pdf/dartmouth/BASIC_4th_Edition_Jan68.pdf),甚至没有AND / OR / NOT,甚至不是IF的关键词.

然而,就微软的BASIC而言,Altair BASIC(c 1975,1https://en.wikipedia.org/wiki/Altair_BASIC)的开头就是这样. Altair BASIC有AND / OR / NOT(https://ia601600.us.archive.org/35/items/bitsavers_mitsMITSAl_6669937/MITS_AltairBASIC_1975.pdf),描述为“LOGICAL AND BITWISE”(第27页 – 第31页,PDF格式).与Altair BASIC一样,False / True映射到0 / -1;并且对于IF的任何非零表达式执行THEN子句.这显然是后来版本的惯用语.

(旁注,我不知道他们的“INTRUDER ALERT”示例是否真的有效,但对我来说似乎不对.)

无论如何,因为AND / OR / NOT是处理整数的运算符,所以将它们添加到表达式解析器/赋值器代码中是很简单的工作.考虑到当时的单位数字千字节内存容量,添加额外的零vs非零运算符可能是一个昂贵的想法.短路AND / OR / NOT将涉及跳转,使表达式解析器/评估器成为更复杂的设计.

由于NOT 0为-1(所有位都设置为1,并以二进制补码的方式进行解释),因此本身需要-1作为True的标准(因此“LOGICAL”方面将按预期工作).

你会注意到VB.NET只是保留了那个遗留的习惯用法(就像它取代的VB6一样),但是每当你把它转换成Integer时它只是一个问题.但正如Hans Passant指出的那样,VB.NET已经从那里发展而来.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读