整数转换(缩小、扩大)、未定义的行为

2024-04-15

对我来说,以我可以轻松理解的方式找到有关该主题的信息非常困难,因此我要求对我所找到的内容进行审查。这都是关于转换和转换的。


在示例中我将提到:

(signed/unsigned) int bigger;
(signed/unsigned) char smaller;
  1. 截断整数。 (更大->更小)

    • first truncate bigger on MSB匹配的一侧smaller size.
    • second, convert截断结果为签名/未签名取决于较小的类型。


    如果较大的值太大而无法适应较小的类型,则会导致未定义的行为(请纠正我)。然而,我的规则应该适用于所有机器(也请纠正我)并且结果应该是可预测的。

  2. Widening整数(较小->较大)

    a) signed char -> signed int

    • 在较小的前面加上 MSB(1 或 0)以匹配较大的尺寸
    • 转换为签名的

    b) signed char -> unsigned int

    • 在较小的值前面加上 MSB(1 或 0)以匹配较大的尺寸。
    • 转换为无符号

    c) unsigned char -> signed int

    • 前面加 0 以匹配更大的尺寸
    • 转换为签名的

    d) unsigned char -> unsigned int

    • 前面加 0 以匹配更大的尺寸
    • 转换为无符号

我没有提到的未定义/未指定的行为可能会出现在哪里?


整数转换永远不会产生未定义的行为(它可以产生实现定义的行为)。

到可以表示正在转换的值的类型的转换始终是明确定义的:值只是保持不变。

到无符号类型的转换始终是明确定义的:该值以 UINT_MAX+1(或目标类型允许的任何最大值)为模。

转换为无法表示正在转换的值的有符号类型会导致实现定义的值或实现定义的信号。

请注意,上述规则是根据整数值而不是根据位序列来定义的。

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

整数转换(缩小、扩大)、未定义的行为 的相关文章

随机推荐

  • 如何在 Java 中创建安全的随机 AES 密钥?

    使用标准 JDK 在 Java 中生成安全 随机 AES 密钥的推荐方法是什么 在其他帖子中 我发现了这一点 但是使用SecretKeyFactory可能是一个更好的主意 KeyGenerator keyGen KeyGenerator g
  • 如何将文件从 JavaScript 发送到 Java WebService

    我有一个使用 Cordova 的 HTML5 应用程序 您可以从您的设备上传文件 图像和视频 我必须将用户上传的文件发送到Java WebService 然后将其上传到服务器 我需要帮助 因为我无法实现我想要的 我尝试了在互联网上找到的几种
  • 在方法中使用索引签名 - Typescript 3.5

    interface Keys key string any const obj Keys trimDescription text string length number string return text length gt leng
  • Swift 中的阶段 1 和阶段 2 初始化

    这是 Apple Swift 文档的副本 一旦超类的所有属性都有初始值 它的内存被认为已完全初始化 并且阶段 1 已完成 超类的指定初始化器现在有机会 进一步自定义实例 尽管不是必须的 一旦超类的指定初始化器完成 子类的指定初始化器可以执行
  • 使用 jQuery AJAX 发送多个数据参数

    我正在向 php 文件发送 ajax 请求 如下所示 function checkDB code userid ajax type POST url profile check code php data code code userid
  • iOS UITextField Swift 中的下划线样式

    我添加了这张用户界面登录图像 希望您能看到 请注意 除了底部的线条之外 文本字段是透明的 我需要输入什么代码才能产生这种效果 我可以将必要的信息放入 用户定义的运行时属性 中吗 创建一个子类UITextField如下所示 只需在故事板中将此
  • 克隆存储库后,Azure DevOps 强制 core.hooksPath

    我尝试实施客户端 git hooks到 azure devops git 存储库 我添加了一个 githooks目录到根目录并实施pre commit钩 我提交所有内容并将其推送到存储库 但当然 只有当我执行时 钩子才会激活 git con
  • 使用 Node.js 和 mongo 设置单例连接

    以前我使用 mongodb 和 php 来查询我使用单例的数据库 这样我只实例化连接一次 然后重复使用它 class MDB protected static instance public static function use if s
  • 如何在 Cucumber-JVM 中明确匹配这些步骤?

    有什么方法可以明确匹配以下步骤吗 And I should have 2 alerts And I should have 2 alerts with param 71 我将它们实现为 And I should have d alerts
  • 使用 file.show 在 R studio 中打开 PDF

    我正在制作一个在 Swirl 中在 R 中运行的 R 教程 我正在尝试在 R 中打开特定的 PDF 文件 我在用 file show paste getwd cv pdf sep title some title 但显示是这样的 它不显示
  • Growl 通知:如何从网站推送 Growl 通知?

    我想知道如何将桌面 Growl 通知从我的 Web 应用程序推送给我的 Web 应用程序的用户 如果可能的话 我想使用 javascript 否则像 Ruby 或 PHP 这样的语言将是我的第二选择 您以前实施过类似的事情吗 如何做呢 我弄
  • 从列表中删除 nan - Python

    我试图从列表中删除 nan 但它拒绝删除 我尝试过 np nan 和 nan 这是我的代码 ztt for i in z if i nan ztt append i ztt or ztt for i in z if i np nan ztt
  • Feedparser 到数据框不输出所有列

    我从 feedparser 解析 URL 并尝试获取所有列 但我没有将所有列作为输出 不确定问题出在哪里 如果执行下面的命令 我没有获得几列的数据 但数据确实存在 您可以在浏览器中查看 my code import feedparser i
  • 左连接查询的 LINQ Fluent API 版本

    我目前有一个运行良好的 LINQ 查询 但我想知道如何将其转换为 LINQ Fluent API 格式 我尝试在 Google 上搜索有关 Fluent API 的不错的教程 尝试自己学习 但似乎没有 这是我要转换的查询 from s in
  • Jersey 2 多部分表单数据注入源

    我有一个方法 POST Consumes multipart form data Produces text xml public Response processForm FormDataParam myparam InputStream
  • RabbitMQ 失败,错误:无法连接到节点rabbit@TPAJ05421843:nodedown

    在 Windows 7 Enterprise 计算机上 我全新安装了 Erlang 17 4 和 RabbitMQ 3 4 3 x64 安装成功且顺利 我还没有尝试创建我的第一个队列或交换器 但我已经看到了麻烦 这个问题类似于另一个SO帖子
  • 不将数据保存到文档方向

    我尝试将数据保存到文档目录中 我没有收到任何错误 但它从不保存数据 它总是说 文件不存在 创建它 let fileManager FileManager default if let documentsDirectory fileManag
  • Control.BeginInvoke 是否有一个变体可以在句柄被销毁之前/之后工作?

    我有一个显示底层异步对象状态的控件 该对象引发事件 这些事件到达表单 在那里它们基本上排队并最终使用 BeginInvoke 进行调用 当控件被废弃时就会出现问题 因为事情是异步发生的 这意味着事件回调在处理过程中总是可能排队 所以我有时会
  • 找不到导入的项目“C:\Microsoft.CSharp.targets”

    我今天尝试打开 Visual Studio 2008 时遇到此错误project在 Visual Studio 2005 中 找不到导入的项目 C Microsoft CSharp targets 在记事本 或记事本 中打开您的csproj
  • 整数转换(缩小、扩大)、未定义的行为

    对我来说 以我可以轻松理解的方式找到有关该主题的信息非常困难 因此我要求对我所找到的内容进行审查 这都是关于转换和转换的 在示例中我将提到 signed unsigned int bigger signed unsigned char sm