发生整数溢出时无符号和有符号整数的行为差异[关闭]

2024-01-03

在维基百科上阅读这篇文章关于整数溢出 http://en.wikipedia.org/wiki/Integer_overflow

我不太明白为什么有符号整数溢出会导致未定义的行为,但无符号整数溢出会导致环绕。为什么它们的行为有差异?

另一个问题:编程语言通常有防止整数溢出的保护措施吗?


造成这种差异的主要原因是 C 和 C++ 语言规范允许实现使用以下三种不同的有符号整数表示形式之一

  1. 1的补码
  2. 2的补码
  3. 有符号震级

如果语言规范在有符号溢出的情况下强制执行某些特定行为(即,优先考虑上述表示形式之一而不是其他两种表示形式),则它将强制基于两种非优先表示形式的平台实现“重”有符号整数算术。这将变得必要,因为此类平台的自然机器级行为与语言标准所需的行为不匹配。这些实现必须不断监视签名溢出并调整结果以符合标准要求。

这将严重降低使用不受欢迎的有符号表示的平台上有符号整数算术的性能,当然,这在 C 和 C++ 等语言中是完全不可接受的,这些语言被设计为在以下情况下尽可能接近底层硬件:它涉及诸如整数算术之类的基本运算。

该行为的原因是不明确的(与“*未指定”相对)是因为有些平台会在整数算术期间发生有符号溢出时故意生成硬件异常。请注意,该行为仅对于算术运算未定义,这些运算通常由机器执行。带符号溢出的值转换不会产生未定义的行为(该行为实际上是实现定义的)。

至于无符号类型,它们在所有平台上的表示方式相同,这意味着在所有平台上要求一致的行为不是问题。概念上与“模 2^宽度”行为相匹配的环绕是几乎所有已知二进制硬件平台上的自然行为。

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

发生整数溢出时无符号和有符号整数的行为差异[关闭] 的相关文章

  • 为什么测试在 TeamCity 中运行比直接在 NUnit 中运行需要更长的时间?

    我进行了一些 C 性能测试 基本上运行两种不同的方法 并检查一种方法的运行速度是否比另一种方法快得多 当我在 NUnit 本地运行它们时 其中一个测试的运行速度是另一个测试的十倍 因此我有一个 NUnit 测试 它使用Stopwatch检查
  • 使用成员函数作为 std::shared_ptr 的自定义删除器时出现问题

    我正在尝试弄清楚如何将 std shared ptr 与自定义删除器一起使用 具体来说 我将其与 SDL Surface 一起使用 如下所示 std shared ptr
  • 序言中不允许引用

    请帮我找到这个异常的原因 我使用以下罐子 core renderer jar itext paulo 155 jar 第一个文档 xhtml lt xml version 1 0 encoding UTF 8 gt lt DOCTYPE h
  • java3d 中的面部着色

    使用java3d 如何不在每个顶点基础上着色 而是在每个面基础上着色 我尝试学习 java3d 但我生成的 Shape3d 看起来并不符合预期 我想用不同的颜色给不同的三角形着色 但我不知道该怎么做 纹理看起来有点大材小用 而且我根本没有掌
  • 如何忽略搜索条件中的空属性

    我有一个不好的要求要做 无论如何 我必须在我的应用程序中实现它 我有一个Track class public class Track public string Name get set public string City get set
  • Java 中 LINQ 的等价物是什么? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Java 中 LINQ 的等价物是什么 没有什么比 LINQ for Java 更好的了 Edit 现在
  • 复杂的 C 声明

    我刚刚在互联网上浏览了一些代码 发现了这个 float foo SIZE SIZE 我如何阅读这份声明 是否有一套特定的规则来阅读如此复杂的声明 我有一段时间没做这个了 从 开始foo然后向右走 float foo SIZE SIZE fo
  • 表单.位置不起作用

    我之前问过这个问题 以为我已经解决了 但它仍然不起作用 Form Show 稍微移动表单位置 https stackoverflow com questions 1214014 form show moves form position s
  • 在Java中一个接一个地播放WAV文件

    我正在尝试玩几个WAV http en wikipedia org wiki WAV文件一个接一个 我尝试了这个方法 for String file audioFiles new AePlayWave file start 但这会同时播放它
  • JFreeChart MeterPlot

    我目前正在用java做Agent项目 在某些时候 我需要显示一个仪表 例如 电池电量 我的程序中有 5 个代理 每个代理都会创建自己的带有名称的仪表图 但不知何故他们没有更新数据集 或者他们正在更新数据集 只是它没有显示在仪表图上 任何想法
  • Windows Phone HttpClient PostAsync 挂起且无响应

    我在拨打电话时遇到问题HttpClientWP 应用程序的 post 方法 PostAsync总是挂起并且不给出任何响应 当我从 WPF 应用程序中尝试时 相同的代码可以工作 这是我正在做的事情 服务器Web API代码 public cl
  • 对于每个抛出异常的语句,try/catch 是否被视为反模式?

    我目前正在审查同事的 Java 代码 我看到很多情况下 每个可能抛出异常的语句都被封装在自己的 try catch 中 其中 catch 块都执行相同的操作 哪个操作与我的问题无关 对我来说 这似乎是一种代码味道 我记得读到过它是一种常见的
  • MPI_Gatherv:根数组中收到的垃圾值

    我正在尝试实施MPI Gatherv函数于C 根据我的程序 包括 root 在内的每个进程都应该创建一个大小等于 进程的等级 1 这将在所有单元格中保持进程的等级 然后这个本地数组被收集到根的 rcv array 中 不知何故 我得到了垃圾
  • java.lang.NoSuchMethodError:com.fasterxml.jackson.databind.type。使用 apache beam Spark runner 运行 go 示例时

    我想跑grades https github com apache beam tree master sdks go examples gradesapache beam go sdk 提出的示例 在一个主服务器和两个从服务器 spark2
  • 在 C++ 中将大型数据向量写入/读取到二进制文件

    我有一个 C 程序 它通过将 ascii 文件中的网格人口数据读取到大型 8640x3432 元素双精度向量中来计算给定半径内的人口 将 ascii 数据读入向量大约需要 30 秒 循环每列和每行 而程序的其余部分只需要几秒钟 我被要求通过
  • 用于将字符串与通配符模式进行匹配的递归函数

    所以我一整天都在试图解决这个作业 只是无法完成 以下函数接受 2 个字符串 第二个 不是第一个 可能包含 的 星号 An 是字符串的替换 空 1个字符或更多 它可以出现 仅在s2中 一次 两次 更多或根本不出现 它不能与另一个相邻 ab c
  • MonoGame 中的 ContentLoadException

    我一直在尝试使用 Xamarin Studio 在 MonoGame 中加载纹理 我的代码设置如下 region Using Statements using System using Microsoft Xna Framework usi
  • java.lang.NoClassDefFoundError:com.google.ads.AdView

    我正在尝试将 admob 广告合并到我的应用程序中 到目前为止我已经添加了以下代码 在我的应用程序主要活动的 onCreate 方法中 adView new AdView this AdSize BANNER my code number
  • Spring JMS开始根据请求监听jms队列

    Spring提供 JMSListener用于监听来自特定队列的消息的注释 还有一个替代方案实施JmsListenerConfigurer http docs spring io spring docs current spring fram
  • “保留供任何使用”是什么意思?

    注意 这是一个c questions tagged c问题 虽然我补充说c questions tagged c 2b 2b如果某些 C 专家可以提供 C 使用与 C 不同的措辞的基本原理或历史原因 在 C 标准库规范中 我们有这个规范文本

随机推荐

  • R Markdown - 更改默认的pdf表格标题前缀

    默认函数 示例Table Table one 在 R Markdown pdf 文档中获取表格标题很好 但我很难从默认的英文 表格 更改为其他内容 同时保持位置 表格上方 和编号 编号是可以解决的 我可以编写自己的计数函数 但位置必须位于表
  • 在存储过程中传递动态订单

    我正在创建下面的存储过程 declare PageNum as Int declare PerPageResult as Int declare StartDate as varchar 25 declare EndDate as varc
  • 在 JavaScript 中将字符串转换为 base64。 btoa 和 atob 已弃用

    我最近一直在 VS Code 中处理一些项目 突然开始在我的代码中收到 btoa 和 atob 现已弃用的通知 除了 VS Code 之外 我找不到任何相关资源 如果这是真的 还有什么替代方案呢 Node btoa 和 atob 函数是唯一
  • 通过滚动窗口分区计算不同客户的数量

    我的问题类似于redshift 通过窗口分区计算不同客户的数量 https stackoverflow com questions 47736584 redshift count distinct customers over window
  • 我不知道 Postgresql 如何在我的 mac 上创建用户

    前两天开始学习postgresql 我在网上遵循的大多数教程要么是旧的 要么是代码不能在我的 Mac 上运行 我遵循了很多教程 做了很多完全不同的事情 当我今天打开系统时 我注意到 Postgresql 在我的 mac 上创建了一个用户 我
  • @Input() 在 Angular 中的用途是什么?

    我正在学习创建功能组件 https angular io tutorial toh pt3 add the input hero propertyangular io 上的教程然后我注意到 Input装饰器属性 src app hero d
  • wtforms 表单类子类化和字段排序

    我有一个用户窗体类 class UserForm Form first name TextField u First name validators Required last name TextField u Last name vali
  • 确定事件处理程序的优先级

    我有以下代码 我处理一个事件两次 但我总是想确保mynewclass始终首先处理事件 然后触发本地事件处理程序代码 我知道 MyClass 事件应该首先触发 因为这是第一个创建的事件 但由于线程和排队正在发生 我认为它花费了太长时间并且它在
  • 在 Python 程序中嵌入 Python shell

    我正在用 Python 创建一个科学实验室 用户可以在其中创建 修改和分析各种对象 我想在程序中放置一个Python shell 以便用户可以通过shell操作对象 注 他还可以通过常用的 GUI 来操纵对象 一个模型可以说明这一点 htt
  • jQuery load() 在 IE 中抛出“权限被拒绝”错误

    我正在通过 AJAX 使用 jQuery 加载页面load 功能 它在 IE8 中不起作用 给出 权限被拒绝 错误 使用 IE 调试器 似乎当 jQuery 尝试打开 xhr 时 ie 会阻止它 问题是 我的页面有一个 javascript
  • jars 似乎不再被签名。 JARSigningException:找到未签名的条目

    NB 7 4RC2 Win 7 在 Java 控制面板中 选中 保留临时 Internet 文件 复选框 我正在使用受信任的证书签署我的 Web Start 应用程序 然而 dist lib 中的第 3 方 jar 似乎未签名 C Prog
  • 更改代码后,PowerShell ISE 有时会出现不可预测的行为

    我正在使用 PowerShell ISE PS 版本 5 0 如果我运行这段代码 Write Host This 它输出 This 如果我像这样修改脚本 Write Host That 它输出 That 伟大的 正如预期的那样 现在 如果我
  • 无法在第二轮中将项目添加到集合中

    基本上我的 Windows 服务应用程序中有一个阻塞集合 每次我想向集合中添加 4 个项目然后对其进行处理 第一轮还好 第二轮就失败了 错误是 BlockingCollection 已被标记为已完成添加 My code public sta
  • Python - 以毫秒为单位的时间差对我不起作用

    我读过一些关于此的文章 并认为我有一些有效的代码 如果两个值之间的差异小于 1 秒 则显示的毫秒是正确的 如果差异超过一秒 它仍然只显示毫秒的差异 如下 Correct now wind 2013 08 25 08 43 04 776209
  • 在自己的数据集上训练 Tensorflow 对象检测

    在花了几天时间尝试完成这项任务之后 我想分享一下我如何回答这个问题的经验 我该如何使用TS 物体检测 https github com tensorflow models tree master research object detect
  • if (true) 的目的

    我见过一些这样写的代码 if true do something 你为什么要做这样的事情 这个结构有什么特别的地方吗 THanks 几乎任何现代编译器都会对此进行优化 我的猜测是 有人在开发过程中把它放在那里 让他们轻松删除代码块 通过更改
  • 如何防止argv中丢失双引号?

    好吧 我知道我可以这样循环 for int i 1 i lt argc 1 i cout lt lt argv i lt lt endl 但是这样双引号就丢失了 那就是一个字符串 something here 被视为 args 数组的一个元
  • 在绘图表达式中使用变量

    我试图将回归结果 即 R2 放入图表中 但似乎无法弄清楚如何从表达式中调用变量 它粘贴变量名称 这是我的代码 R2Val lt signif summary sMod pre90 r squared 1 2 text 92 4 expres
  • zsh compinit:安装 Homebrew 后,Mac 上出现不安全目录错误消息

    在我的 Mac 上安装 Homebrew 和 Homebrew Cask 后 以管理员身份 用户 ID 为 admin 运行 MacOS 10 12 6 我收到错误消息 zsh compinit insecure directories r
  • 发生整数溢出时无符号和有符号整数的行为差异[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi