为什么 True 等于 -1

2024-06-18

我想知道为什么 True 等于 -1 而不是 1。如果我没记错的话(以前)在 C 语言中,“true”将等于 1。

    Dim t, f As Integer

    t = True
    f = False

    Console.WriteLine(t) ' -1
    Console.WriteLine(f) ' 0
    Console.ReadLine()

当您将任何非零数字转换为Boolean,它将评估为True。例如:

Dim value As Boolean = CBool(-1) ' True
Dim value1 As Boolean = CBool(1) ' True
Dim value2 As Boolean = CBool(0) ' False

然而,正如您所指出的,任何时候您施放Boolean即设置为True to an Integer,它将计算为 -1,例如:

Dim value As Integer = CInt(CBool(1)) ' -1

这样做的原因是因为-1是有符号整数值,其中所有位都等于 1。Boolean存储为 16 位整数,通过简单地对所有位进行 NOT 操作而不是仅对最低有效位进行 NOT 操作,可以更轻松地在 true 和 false 状态之间切换。换句话说,为了True to be 1,它必须像这样存储:

True  = 0000000000000001
False = 0000000000000000

但像这样存储它更容易:

True  = 1111111111111111
False = 0000000000000000

它更容易的原因是,在低层次上:

1111111111111111 = NOT(0000000000000000)

Whereas:

0000000000000001 <> NOT(0000000000000000)
0000000000000001 = NOT(1111111111111110)

例如,您可以使用复制此行为Int16像这样的变量:

Dim value As Int16 = 0
Dim value2 As Int16 = Not value
Console.WriteLine(value2) ' -1

如果您使用无符号整数,这会更明显,因为这样,True是最大值而不是-1。例如:

Dim value As UInt16 = CType(True, UInt16) ' 65535

因此,真正的问题是,为什么 VB.NET 使用 16 位来存储单个位值。真正的原因是速度。是的,它使用 16 倍的内存量,但处理器执行 16 位布尔运算的速度比执行单位布尔运算的速度要快得多。

旁注:原因Int16的价值-1存储为1111111111111111而不是作为1000000000000001正如您所期望的(其中第一位是“符号位”,其余的是值),是因为它存储为二进制补码。将负数存储为补码意味着处理器更容易执行算术运算。它也更安全,因为在两个人的赞美中,没有办法代表0作为负数,这可能会导致各种混乱和错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 True 等于 -1 的相关文章

  • 将网格视图列的宽度设置为动态,而不影响控件的最小宽度

    我在用着
  • 模式弹出窗口上的按钮单击事件,在网格视图内未触发

    我遇到以下问题 场景 我有一个 asp 网格 其中有一些绑定到数据的列 最后一列已转换为模板字段 在这个模板字段中有一个按钮 上面附加了一个模式弹出扩展器 该字段中隐藏着一个模式弹出窗口 此模式弹出窗口用于添加新帐户 它包含 2 个文本框
  • 不建议在 VB.Net 中使用 Mid()、Instr()、LBound()、UBound() 等吗?

    我有 C 背景 但现在主要使用 VB Net 在我看来 上述函数 以及其他函数 例如 UCase LCase 等是 VB6 及之前版本的遗留物 在 VB Net 中使用这些函数是不受欢迎的 还是纯粹取决于个人喜好 我个人的偏好是远离它们 但
  • 如何判断一个类是否被某个特定属性修饰

    我试图确定接口是否用特定属性装饰 例如我有以下界面
  • Visual Studio 2022 - 编译旧应用程序时出错

    我们正在尝试在 Visual Studio 2022 中使用 VB6 32 位应用程序 编译 2002 年以来非常旧的应用程序 我们需要调试此应用程序并能够在 Windows 10 计算机上运行此应用程序 编译时 我们发现以下错误 这似乎是
  • 某些笔记本电脑中的 VB.net Forms UI 显示问题

    我是 VB 应用程序的新手 无法弄清楚我的应用程序出了什么问题 有一个带有几个标签和文本字段的表单 当我在我和其他人的机器上运行该应用程序时 它显示良好 并具有正确的对齐和字体 然而 对于某些人来说 应用程序表单 UI 是破碎的 未对齐的文
  • 将 PDF 嵌入到 WPF 应用程序中

    我正在尝试在 WPF 应用程序中嵌入 显示 PDF 到目前为止 我已经尝试过这些解决方案 但没有成功 在 a 中显示 PDFWindowsFormsHost主持一个AxAcroPdf控制 类似于显示的内容here http hugeonio
  • UDP SocketException - 通常只允许每个套接字地址使用一次

    尽管这里有很多非常相似的问题 但提供的答案都没有帮助我 这让我很难过 我有一个非常大的管理系统 我的任务是为其编写一些 UDP 数据包发送 接收 我已经编写了一个原型 一切都很好 所以我开始将我的代码合并到所述系统中 然而 我现在弹出了一个
  • 什么可能会在一台服务器上导致此错误,而在另一台服务器上则不会?

    我们有一个连接到外部 Web 服务的 ASP Net 网站 几天前它突然停止工作 基本代码是这样的 Try request New ExternalWebService ProcessRequestService Error occurs
  • 确定哪个进程锁定了文件

    我有一个在本地运行良好的单元测试 但上传到 TeamCity 构建服务器时失败 并显示 该进程无法访问该文件 因为它正在被另一个进程使用 在我在测试中做任何事情之前 我检查设置是否有文件 存在 如果存在尝试删除它 这会失败并出现相同的错误
  • 在 VB.NET 中将类标记为静态

    正如刚刚在最近的一篇文章中所说question https stackoverflow com questions 135759 why cant i inherit iodirectory and answer https stackov
  • .net 的自动完成文本框,支持分隔符

    我正在开发一个应用程序 它需要一个带有多个单词的自动完成 建议 下拉 的文本框 由空格等分隔符分隔 就像 StackOverflow 中的标签文本框一样 例如 我开始输入 app 它应该显示建议列表中以以下内容开头的所有单词app 当我输入
  • 如何在 VB.NET 中对数组进行 JSON 编码?

    我需要为我正在使用的例程传回 JSON 结果 在VB NET 数组如何进行JSON编码 Dim serializer as New JavaScriptSerializer Dim arrayJson as String serialize
  • 短路:Or Else 与 Or 组合

    如果我有以下 a OrElse b 是True那么显然 b 永远不会被评估 但如果我添加一个Or 然后呢 a OrElse b Or c c 是否 应该被评估 如果我放入一些括号怎么办 抱歉 如果这是基本的 当然 我可以自己测试答案 但我无
  • 我的 32 位头痛现在变成了 64 位偏头痛?!? (或 64 位 .NET CLR 运行时问题)

    从在 64 位 JIT 下运行与 32 位 JIT 下运行 NET 应用程序切换到在 32 位 JIT 下运行时 在性能 内存等方面发生了哪些不寻常的 意想不到的后果 我对好的事情感兴趣 但对人们遇到的令人惊讶的坏问题更感兴趣 我正在编写一
  • VB.NET 中的 Excel 自动调整列

    我这里有我的 VB6 代码并且运行良好 For CLms 1 To 10 ws Columns CLms AutoFit lt Autofilt data on XL sheet Next CLms 我已经搜索了如何在 VB NET 中使
  • 将面板添加到 Datagridview

    我想将面板放入包含一组控件的列中 并将其放入 datagridview 中 我怎么能这么做呢 因为标准方法允许添加复选框 按钮 组合框等 但我找不到如何放置简单的面板 谢谢你的帮助 面板控件也继承自控件类 因此您可以像添加任何其他控件一样添
  • VB.net 将窗口置于前面

    我需要在 VB net 2010 中使用什么代码来设置窗口到屏幕前面 我想要实现的是显示紧急警报类型 它是一种表单 由于某些原因我没有使用消息框 有人建议使用以下代码 但这不起作用 Private Sub frmMessage Load B
  • Structure 中的无参数构造函数

    继从这个问题 https stackoverflow com q 32122660 592111关于在中使用不同的 Visual Basic 版本Visual Studio 2015 http en wikipedia org wiki M
  • 如何用ListBox制作自定义控件?

    我想用自定义的项目模板制作水平ListBox 所以我制作了它的基本模板 但是 我找不到将 事物 绑定到 WPF XAML 的示例 尤其是在 ListBox 填充了自定义项的情况下 我只是想动态添加 删除列表框中的项目 其中包含图像 标签 组

随机推荐

  • 如何处理 MSTest 中的 currentDomain.UnhandledException

    我尝试根据答案实施解决方案单元测试时如何处理其他线程引发的异常 https stackoverflow com a 934604 518530 但我仍然不明白在处理程序中要做什么 假设我有一个测试 TestMethod void Test
  • Windows 8.1 升级后 Apache 无法工作 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 今天从 Windows 8 升级到 Windows 8 1 后 Apache 不再工作 我上次从 Windows 7 升级到 Window
  • String.contains() 的时间复杂度

    String contains 的时间复杂度是多少 假设 n 是与另一个长度为 k 的字符串进行比较的字符串的长度 如果不知道您感兴趣的 String contains 的实际实现 就没有答案 或者你打算使用什么算法 一个完全幼稚的实现可能
  • 在 Android Webview 中加载 Angular JS 网站的问题

    大家好我正在尝试加载GTV http gtvqa com Android WebView 中 它在移动浏览器中加载得很好 但在 webview 中则不行 这是我的代码 WebView theWebPage new WebView this
  • OpenPyXL - 如何查询单元格边框?

    python 和 openpyxl 都是新的 编写一个 py 脚本来遍历大量 Excel 工作簿 工作表 并且需要找到由边框格式标识的某些单元格 我在网上看到几个关于如何设置单元格边框的示例 但我需要阅读它们 具体来说 当表内的数据不一致但
  • 将小箭头添加到 iPhone TableView 单元格中单元格的右侧

    这应该很简单 我有一个带有 TableView 的 iPhone 应用程序 如何将经典的小箭头添加到每个单元格的右侧 只需设置相应的附件类型的财产UITableViewCell cell accessoryType UITableViewC
  • 仅使用按位运算在 C 中实现更大的等号

    我知道许多基本运算 例如加法或除法 也可以仅使用按位运算符在 C 中实现 如何使用大于或等号 gt 执行相同操作 if x gt 0 我能想出的最简单的解决方案 include
  • 如何分组显示argparse子命令?

    对于具有许多子命令的程序 我想在 help 输出中显示它们按逻辑分组 Python argparse 有一个add argument group http docs python org library argparse html argp
  • pandas 系列值之间的过滤

    If s is a pandas Series http pandas pydata org pandas docs stable dsintro html series 我知道我可以这样做 b s lt 4 or b s gt 0 但我做
  • Primefaces 中动态生成条形图

    我正在使用 Primefaces 4 0 我需要根据查询结果的数量生成条形图 条形图的标题和颜色也应该能够为所有使用查询结果的人动态设置 条形图示例如下
  • 备份并上传到FTP服务器[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 谁能指导我一个脚本解决方案来备份目录并将其上传到 ftp 服务器 我最初正在寻找批处理脚本 但任何解决
  • 在 javafx.scene.control.TextArea 和 javafx.scene.control.TextField 中设置插入符位置

    我需要在代码中手动设置插入符位置 有一个getCaretPosition under javafx scene control TextInputControl但没有setter方法 如何设置插入符位置 TextArea ta new Te
  • 从另一台计算机访问 MYSQL

    我想开发一个java桌面应用程序 我想在其中设置服务器 这意味着我在这里使用mysql db 该数据库将仅存储在一台电脑上 其余所有用户都可以访问该数据库 所以 我听说了mysql远程连接 其中尝试了一些事情 这些措施如下 我的电脑已连接w
  • EOutOfMemory 使用 Delphi 创建大型 XML

    我正在使用 Delphi 从关系数据库中的数据创建 XML 文档 它在小数据集上测试得很好 但是当我尝试将数据集的大小扩展到生产级别时 它最终在节点创建期间因 EOutOfMemory 异常而崩溃 我正在使用放在表单上的 TXMLDocum
  • 使用 lambda 进行延迟字段初始化

    我想在没有 if 语句的情况下实现延迟字段初始化 或延迟初始化 并利用 lambda 所以 我希望有以下相同的行为Foo财产但没有if class A
  • 如何将现有 ASP.NET 网站转换为 HTML 5

    我有一个网站 首先由 Visual Studio 2005 创建 然后转换为 Visual Studio 2008 目前使用 Visual Studio 2008 在 Visual Studio 2010 Service Pack 1 之后
  • 为什么 Visual Studio 2008™ 会崩溃? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我知道这个线程 https stackoverflow com questions 96780 why is visual studio consta
  • 非实例化模板成员的编译时错误而不是链接时错误

    我有模板类ItemContainer这实际上是整个容器系列的外观 具有不同的功能 如排序 索引 分组等 实施细节隐藏在cpp 使用 pimpl 习惯用法和显式实例化的文件 模板仅使用定义容器实际行为的众所周知的有限实现类集进行实例化 主模板
  • 自定义相机视图 Swift iOS 8 iPhone Xcode 6.1

    我想在 iPhone 的 View 中使用相机 我不想使用典型的全屏相机视图 而是我自己的 例如 我想在屏幕中间有一个 200x200 的正方形 并且有一个相机预览 在这个方块下面我想要一个拍照按钮 怎么做 我是新手 速度很快 你会想要使用
  • 为什么 True 等于 -1

    我想知道为什么 True 等于 1 而不是 1 如果我没记错的话 以前 在 C 语言中 true 将等于 1 Dim t f As Integer t True f False Console WriteLine t 1 Console W