C 中带符号和无符号变量的环绕解释?

2023-11-26

我在 C 规范中读到了一些无符号变量(特别是无符号短int)执行一些所谓的环绕关于整数溢出,尽管我在有符号变量上找不到任何东西,除了我留下的未定义的行为.

我的教授告诉我,他们的价值观也被包裹起来(也许他只是指海湾合作委员会)。我认为这些位只是被截断了,而我留下的位给了我一些奇怪的价值!

环绕是什么以及它与仅截断位有何不同。


有符号整型变量在 C 语言中没有环绕行为。算术计算期间有符号整数溢出会产生未定义的行为。请注意,您提到的 GCC 编译器以实现而闻名严格的溢出语义在优化中,这意味着它利用了此类未定义行为情况所提供的自由度:GCC 编译器假定有符号整数值永远不会回绕。这意味着 GCC 实际上恰好是您使用的编译器之一cannot依赖于有符号整数类型的环绕行为。

例如,GCC 编译器可以假设对于变量int i以下条件

if (i > 0 && i + 1 > 0)

相当于仅仅

if (i > 0)

这正是严格的溢出语义 means.

无符号整数类型实现模算术。模数相等2^N where N是类型的值表示中的位数。因此,无符号整数类型确实会在溢出时出现回绕。

然而,C 语言从不执行小于以下域的算术计算:int/unsigned int. Type unsigned short int您在问题中提到的通常会被提升为类型int在任何计算开始之前的表达式中(假设范围unsigned short符合范围int)。这意味着 1) 的计算unsigned short int将在域中执行int,溢出发生时int溢出,2) 此类计算期间的溢出将导致未定义的行为,而不是环绕行为。

例如,这段代码会产生一个环绕

unsigned i = USHRT_MAX;
i *= INT_MAX; /* <- unsigned arithmetic, overflows, wraps around */

而这段代码

unsigned short i = USHRT_MAX;
i *= INT_MAX; /* <- signed arithmetic, overflows, produces undefined behavior */

导致未定义的行为。

If no int发生溢出并且结果被转换回unsigned short int类型,再次按模减少2^N,这看起来就像该值已回绕一样。

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

C 中带符号和无符号变量的环绕解释? 的相关文章

  • “构建”构建我的项目,“构建解决方案”则不构建

    我刚刚开始使用VS2010 我有一个较大的解决方案 已从 VS2008 成功迁移 我已将一个名为 Test 的控制台应用程序项目添加到解决方案中 选择构建 gt 构建解决方案不编译新项目 选择构建 gt 构建测试确实构建了项目 在失败的情况
  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • ASP.NET MVC:这个业务逻辑应该放在哪里?

    我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • 关于 C++ 转换:参数 1 从“[some_class]”到“[some_class]&”没有已知的转换

    我正在研究 C 并且遇到了一个错误 我不知道确切的原因 我已经找到了解决方案 但仍然想知道原因 class Base public void something Base b int main Base b b something Base
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • 如何从两个不同的项目中获取文件夹的相对路径

    我有两个项目和一个共享库 用于从此文件夹加载图像 C MainProject Project1 Images 项目1的文件夹 C MainProject Project1 Files Bin x86 Debug 其中有project1 ex
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK

随机推荐

  • 获取代码片段中的命名空间

    微软链接here列出了我们可以使用的三种方法 但是我们如何获取当前的命名空间呢 我看到有一个类似的问题 但答案是使用宏 它不能解决这个特定问题 NameSpace 可以执行以下操作
  • 浏览器刷新时随机全屏背景图像

    我使用我在网上找到的这个脚本 每当刷新浏览器时就会有一个随机背景图像 CSS body background no repeat center center fixed webkit background size cover moz ba
  • 嵌套属性可以与继承结合使用吗?

    我有以下课程 Project Person Person gt 开发商 Person gt Manager In the Project模型我添加了以下语句 has and belongs to many people accepts ne
  • 在 Typescript 中,如何区分 Node 和普通 Javascript 错误类型?

    我有以下功能 Retrieves a component template from filesystem const getComponentTemplate async p string Promise
  • 在javascript中将对象移向一点[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我为此在数学上苦苦挣扎 我需要将一个物体均匀地移向一个点 我在 x 500 y 250 处有一个点 在 0 0 处有一个对象 如果移动速度为 1 我将如何计算出要获得该点 我需要以
  • 如何按 POJO 属性降序对列表进行排序?

    我有这样的 POJO 类学生 class Student private int score private String FirstName Getters and setters 我正在像这样创建 ArrayList public st
  • 在富文本框中创建换行符

    我需要帮助为 RichTextBox 创建新行 但在使用 CheckBox 时我无法使用它 它保持重叠而不是创建新的单词行 尝试使用的方法rtbdisplay text display envrionment newline 我的代码中的示
  • 如何在Java中显示树形层次结构?

    我的数据库中有一个名为 Process 的表 该进程表有3个字段 进程号 进程名 进程父进程id 现在我想以图形格式显示这个父子层次结构 那么您能否向我提出以下建议 Q1 为了从数据库获取数据并将数据存储在该数据结构中 哪种数据结构更好 Q
  • 如何在 IE 中使用 JQuery 隐藏和显示 SELECT 选项

    我试图从下拉列表中隐藏一些选项 jQuery 的 hide and show 在 Firefox 和 Chrome 中工作得很好 但在 IE 中就不那么幸运了 有什么好主意吗 根据浏览器检测隐藏和显示选项 在许多可能的方法中 此方法需要浏览
  • Mysql 表名不能大写

    我需要更改 mysql 接受大写和小写表名 select from users 上面的查询工作正常 但下面的查询不起作用 select from USERS 这取决于您的系统 主要值是 Unix Windows 和 Mac OS 您需要将系
  • firebase 消息服务可以 android:exported="false" 吗?

    想确认是否可以设置android exported false 例如 ID 服务和消息服务 我通过保持测试android exported false 和通知工作正常
  • param: _* 在 Scala 中意味着什么?

    作为 Scala 2 9 1 的新手 我有一个List Event 并想将其复制到Queue Event 但以下语法会产生Queue List Event 反而 val eventQueue Queue events 由于某种原因 以下工作
  • 了解 iBeacon 数据:功率字段和其他字节

    我是蓝牙系统的新手 我正在尝试了解新的苹果技术 iBeacon 使用的数据 已经有一些很好的答案解释了它是如何工作的 我一直在阅读我能找到的所有内容 特别是蓝牙规范 尽管如此 我仍然遗漏了一些要点 我将首先举一个例子 我正在使用设置广告数据
  • 如何在linux中使用cx_freeze创建要在windows中使用的包

    如何在 Linux 中使用 cx freeze 创建一个可在 Windows 中使用的包 如 exe 或 bin 文件 我在 Linux 中测试了 cx freeze 但在 Linux 和 Windows 中制作软件包是未知的 例如 cxf
  • 将 VB.NET Winforms 应用程序移植到 C#

    是否有任何 好的 资源可将 VB NET winforms 应用程序移植到 C 我确信有软件可以翻译代码 但我希望同时重构代码 保持当前的形式是有问题的 因为它使用了 VB NET 允许的一些 不良设计 实践 并且会使未来的维护进一步复杂化
  • 如果 chrome 开发工具打开,AJAX 可以工作,但如果 chrome web 工具关闭,AJAX 就不行?

    我正在通过 ajax 加载 json 文件 如果 Chrome 开发工具打开 一切都会完美运行 如果 Chrome 开发工具关闭 则会失败 值得庆幸的是 即使关闭时 开发工具仍然会继续做它的事情 所以我仍然可以看到我得到的异常 Failed
  • C#:枚举中的按位运算符(MVC 中的自定义授权)

    我目前正在阅读一篇文章 但我不太明白这是如何与逻辑运算符一起使用的 谁能向我解释一下吗 例如 如果我想与客户 员工 主管和管理员建立 4 级证券 Serializable Flags public enum WebRoles custome
  • UnsatisfiedLinkError:java.library.path中没有opencv_java249

    在我的 Mac 上运行一段代码时遇到一些问题 有人给我写了一个图像分析 java 应用程序 但当我尝试在 netbeans 上运行它时 我不断收到此错误 运行 线程 主 java lang UnsatisfiedLinkError 中出现异
  • Guava 中有类似 Function Java 的 Effect 的东西吗?

    我知道纯函数式编程的目标之一是消除可变性 从而排除副作用 但让我们面对现实吧 即使存在所有函数式编程库 Java 也不是一种函数式语言 事实上 一些 FP 图书馆似乎知道并期望这一点 例如 在函数式 Java 中 有Effect班级 在 J
  • C 中带符号和无符号变量的环绕解释?

    我在 C 规范中读到了一些无符号变量 特别是无符号短int 执行一些所谓的环绕关于整数溢出 尽管我在有符号变量上找不到任何东西 除了我留下的未定义的行为 我的教授告诉我 他们的价值观也被包裹起来 也许他只是指海湾合作委员会 我认为这些位只是