无符号整数差异的意外结果

2024-01-20

我很惊讶这个函数为 dif1 和 dif2 产生不同的值

void test()
{
    unsigned int x = 0, y = 1;
    long long dif1 = x - y;
    long long dif2 = (int)(x - y);
    printf("dif = %lld %lld",dif1,dif2);
}

这是正确的行为吗?在 diff1 计算中,它首先将 32 位无符号差提升为 64 位无符号值,然后添加符号。这是语言未指定的标准行为,还是编译器错误?第二种形式是否保证产生-1,或者取决于编译器的实现?我认为最安全的结构是: 长长dif3 = (长长)x - (长长)y;


第一个是明确定义的,如果我们假设long longunsigned int。如果不是,那么作业给出的问题与答案的第二部分相同。

long long dif1 = x - y;

无符号整数将换行,您将获得可以存储在无符号整数中的最大值。

6.2.5 p9:涉及无符号操作数的计算永远不会溢出, 因为无法用结果无符号整数类型表示的结果是 减少对比最大值大 1 的数取模 由结果类型表示。


至于第二个

long long dif2 = (int)(x - y);

它是实现定义的:

6.3.1.3 p3:否则,新类型是有符号的,并且值不能在其中表示;要么 结果是实现定义的或引发实现定义的信号。

在这种情况下,最大值为unsigned int不能用一个表示int以上规则生效。

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

无符号整数差异的意外结果 的相关文章

  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • Rails 3.2 和phonegap

    我当前正在运行一个rails应用程序 我想为其制作一个移动应用程序 我不想学习objective c或java 我读了很多关于phonegap的文章以及如何使用它来制作跨平台Web应用程序 Phonegap编译css htm js Rail
  • 如何在mvc4中区分连接等的调试和发布

    所以我对 MVC4 相当陌生 很多模式对我来说都是新的 然而 我好奇的一件事是关于发布 调试模式的最佳实践 对我来说 实时模式和调试模式之间有很多不同的事情 我希望所有这些都是自动的 这样我就不需要更改任何内容来发布 例如 我在我的存储库
  • 使用 sed 从变量中删除模式

    我正在使用一个脚本 该脚本有一个名为PRODUCT VERSION 该版本带有一个点 例如6 0 我需要删除点并将结果保存在另一个变量中 到目前为止我已经做到了 但它不能正常工作 PRD VER sed s PRODUCT VERSION
  • 从字符串数组创建字符串。最快的方法?

    我有一个字符串数组 A 到 E 我想将它们连接成一个字符串 A B C D E 我应该循环遍历数组还是使用 Join 函数 Dim MyArray 5 as String Dim MyString as String MyArray 1 A
  • 如何从网页添加事件到iCal / Outlook / Gmail?

    包含下载 ics iCal 文件的链接吗 通过电子邮件附加 ics 文件 如何构建文件 哪里可以找到规格 将hCalendar中的数据渲染到页面上有什么好处 那么搜索引擎可以以某种方式索引它吗 Thanks 你的问题的第一部分在谷歌上似乎有
  • PL/SQL中如何使用ifexists-ifnotexists?

    我正在尝试将 ifexists 语句从 SQL Server 转换为 PL SQL 但出现错误 我正在尝试检查是否NAME 1我的中不存在table 1 如果它们不存在 那么我正在检查是否COLUMN NAME NAME 2 存在于我的ta
  • 如何使用 REST API 在 keycloak 中重置用户密码

    我想对我的 Keycloak 服务器进行休息调用 根据文档 这应该很容易 https www keycloak org docs api 10 0 rest api index html executeactionsemail https
  • 支持的视频尺寸 MediaRecorder API android

    我正在尝试使用 mediarecorder 和 mediaprojection api 记录屏幕内容 当我尝试在设备上将视频更改为高清时 录制失败 但在 640 x 480 分辨率下工作正常 所以我的问题是如何获得特定设备上支持的视频分辨率
  • Ionic 模拟 android ERR_CONNECTION_REFUSED localhost:8100

    我尝试在 Android 上模拟我的 Ionic 应用程序 一旦我的应用程序在模拟设备中启动 它就会中断并出现以下错误 应用程序错误 净 ERR CONNECTION REFUSED http 本地主机 8100 http localhos
  • 有没有更好的方法在 C# 中创建深克隆和浅克隆?

    我一直在为一个项目创建对象 在某些情况下我必须为此对象创建深层副本 我想出了使用 C 的内置函数 MemberwiseClone 困扰我的问题是 每当我创建一个新类时 我就必须编写一个像下面的代码这样的函数来进行浅拷贝 有人可以帮我改进这部
  • C# 链式ContinueWith不等待上一个任务完成

    我正在测试 C async await 的异步性 并发现了一个惊喜 ContinueWith 的后续代码不会等待上一个任务完成 public async Task
  • 如何在 Android 模拟器中模拟总网络丢失

    我正在尝试编写一个应用程序 需要知道何时没有可用的 IP 网络连接 我正在使用 android net conn CONNECTIVITY CHANGE 广播事件以及 ConnectivityManager 对状态变化做出反应以实现此目的
  • 如何根据文本过滤 VS Code 中的问题?

    我在 Windows 10 x64 上使用 VS Code 1 41 0 在我的代码 使用您可能从未听说过的研究语言 中 我在 问题 面板中收到很多特定类别的警告消息 我想忽略这些消息 消息的文本在不同实例中略有不同 但始终包含 重复 一词
  • 寻找一种非 LL(1) 的语言?

    我最近一直在研究很多非 LL 1 的语法 其中许多可以转换为 LL 1 的语法 然而 我从未见过这样的例子明确的语言这不是 LL 1 换句话说 一种语言的任何明确语法都不是 LL 1 我也不知道如果我不小心偶然发现了一种语言 我将如何证明我
  • Python 中 open 和 codecs.open 的区别

    在 Python 中打开文本文件有两种方法 f open filename And import codecs f codecs open filename encoding utf 8 When is codecs open优于open
  • 如何获取 Firestore 文档大小?

    From Firestore 文档 https firebase google com docs firestore quotas 我们得到Firestore 文档的最大大小 is 文档的最大尺寸1 MiB 1 048 576 字节 QUE
  • Polarion ALM 工具 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我们正在公司寻找完整的 ALM 解决方案 我们正在研究 Polarion ALM 和 RTC 有人听说过 Polarion 完整的 ALM 工具吗 如
  • 将 SVN 提交发送到 RSS 源

    所以我最喜欢的网络工具 Subtlety http subtlety errtheblog com 最近已停止使用 这意味着我无法再轻松访问我关注的各种 SVN 项目的提交日志 是否有任何其他工具可以轻松地为公共 SVN 存储库生成 RSS
  • 在 Flutter 中实现视频源的最佳方式是什么?

    我正在 flutter 中构建一个应用程序 其中包含类似 TikTok 中的视频源 您可以想象一个 ListView 您可以在其中滚动浏览一些视频 5 25 秒 这些视频存储在 Google Cloud Platform 中 目前 包含超过
  • 无符号整数差异的意外结果

    我很惊讶这个函数为 dif1 和 dif2 产生不同的值 void test unsigned int x 0 y 1 long long dif1 x y long long dif2 int x y printf dif lld lld