C语言的整形提升规则

这篇具有很好参考价值的文章主要介绍了C语言的整形提升规则。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


C的整型算术运算总是至少以缺省整型类型的精度来进行的。
为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升。
整型提升的意义:
表达式的整型运算要在CPU的相应运算器件内执行,
CPU内整型运算器(ALU)的操作数的字节长度般就是int的字节长度,同时也是CPU的通用寄存器的长度。
因此,即使两个char类型的相加,在CPU执行时实际上也要先转换为CPU内整型操作数的标准长度。
通用CPU(general - purpose CPU) 是难以直接实现两个8比特字节直接相加运算
(虽然机器指令中可能有这种字节相加指令)。
所以,表达式中各种长度可能小于int长度的整型值,
都必须先转换为int或unsigned int,然后才能送入CPU去执行运算。

//负数的整形提升 char c1 = -1; //变量c1的二进制位(补码)中只有8个比特位:1111111 //因为 char 为有符号的 char所以整形提升的时候,高位补充符号位, // 即为1提升之后的结果是 :11111111111111111111111111111111


//正数的整形提升 char c2 = 1; //变量c2的二进制位(补码)中只有8个比特位:00000001 //因为 char 为有符号的 char所以整形提升的时候,高位补充符号位, // 即为0提升之后的结果是 :00000000000000000000000000000001


//无符号整形提升,高位补0


//下面演示一下字符类型的数据相加的计算过程
int main() {
    char a = 5;

    //如果a为int(四个字节)类型,那补码为:00000000000000000000000000000101
    //但是目前a为char(一个字节)类型,只能截断存储补码为:00000101

    char b = 126;
    //如果b为int(四个字节)类型,那补码为:00000000000000000000000001111110
    //但是目前b为char(一个字节)类型,只能截断存储补码为:01111110

    char c = a + b;
    //当a和b遇到操作符时,会整形提升,此时
    //a的补码变为:00000000000000000000000000000101
    //b的补码变为:00000000000000000000000001111110
    //相加之后c为:00000000000000000000000010000011
    //但是目前是int类型,最后存入c时又要变成char类型:10000011

    printf("%d\n", c);
    //这里要把c提升为整数并打印出来
    //所以按照填充符号位的规则变为:11111111111111111111111110000011
    //补码就是:11111111111111111111111110000011
    //反码就是:11111111111111111111111110000010
    //原码就是:10000000000000000000000001111101-> -125
  
 return 0;
}
文章来源地址https://www.toymoban.com/news/detail-805767.html

到了这里,关于C语言的整形提升规则的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关联规则挖掘算法--Apriori算法

    关联规则分析是数据挖掘中最活跃的研究方法之一,目的是在一个数据集中找到各项之间的关联关系,而这种关系并没有在数据中直接体现出来。Apriori算法 关联规则 学习的经典算法之一,是R.Agrawal和R.Srikartt于1944年提出的一种具有影响力的挖掘布尔关联规则挖掘频繁项集的

    2024年02月04日
    浏览(54)
  • 【C++】STL 算法 - transform 变换算法 ② ( 变换规则为 普通函数 | 变换规则为 Lambda 表达式 | 变换规则为 函数对象 | 变换规则为 函数适配器转换的函数对象 )

    transform 算法函数原型 : 下面的函数原型作用是 将 一个输入容器 中的元素 变换后 存储到 输出容器 中 ; 参数解析 : InputIt first1 参数 : 输入容器 的 起始迭代器 ( 包含 ) ; InputIt last1 参数 : 输入容器 的 终止迭代器 ( 不包含 ) ; OutputIt d_first 参数 : 输出容器 的 开始迭代器 , 输出元

    2024年01月21日
    浏览(48)
  • SQL语言的规则与规范

    本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远! 1946 年,世界上第一台电脑诞生,如今,借由这台电脑发展起来的互联网已经自成江湖。在这几十年

    2024年02月08日
    浏览(35)
  • Go语言代码断行规则详解

    本文深入探讨了Go语言中代码断行的各个方面,从基础概念到实际应用实践。 关注【TechLeadCloud】,分享互联网架构、云服务技术的全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架

    2024年02月08日
    浏览(48)
  • CGAL 网格整形平滑

    网格整形:该过程是使表面光滑的过程,通常通过最小化整形函数来进行实现,该函数本质上仍是一种对端点加权的函数,所选顶点的点被重新定位以产生尽可能光滑的表面补丁,这个过程主要是基于求解具有边界约束的线性双拉普拉斯系统,如参考文献[1]中所述。

    2024年01月20日
    浏览(34)
  • (8)输入整形

    文章目录 前言 1 重要参数 2 ACRO参数 3 完整参数 Copter 有一套参数来定义飞机的飞行感觉。这使得飞机可以被设置成一个非常积极的调子,但仍然感觉是一个非常温顺和友好的飞机在飞行。 这些参数中最重要的是: PILOT_Y_RATE : 所需的最大偏航率,单位:度/秒; ANGLE_MAX:最大

    2024年02月06日
    浏览(43)
  • 『C语言』隐式类型转换规则

    🔥 博客主页 : 小羊失眠啦. 🔖 系列专栏 : C语言 🌥️ 每日语录 : 但行前路,不负韶华! ❤️ 感谢大家点赞👍收藏⭐评论✍️ 今天小羊又来给铁汁们分享关于C语言的 隐式类型转换规则 ,在C语言中类型转换方式可分为 隐式类型转换 和 显式类型转换 (强制类型转换),

    2024年02月12日
    浏览(35)
  • 贪心算法(无规则)

    1.455. 分发饼干 链接: 455. 分发饼干 2.1005. K 次取反后最大化的数组和 链接: 1005. K 次取反后最大化的数组和 3.860. 柠檬水找零 链接: 860. 柠檬水找零 1.376. 摆动序列 链接: 376. 摆动序列 贪心解法 2.738. 单调递增的数字 链接: 738. 单调递增的数字 1.122. 买卖股票的最佳时机 II 链接:

    2024年02月06日
    浏览(29)
  • 拆解雪花算法生成规则

    雪花算法(Snowflake)是一种生成分布式全局唯一ID的算法,生成的ID称为Snowflake IDs或snowflakes。这种算法由Twitter创建,并用于推文的ID。目前仓储平台生成ID是用的雪花算法修改后的版本。 雪花算法几个特性 生成的ID分布式唯一和按照时间递增有序,毫秒数在高位,自增序列在

    2024年02月16日
    浏览(40)
  • ARM整形算力计算

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 之前做人工智能使用RK3399的CPU去推理,发现效果不理想,现在基本上是采用NPU来推理了。我内心不禁萌生一个想法,ARM的CPU算力到底有多少,为什么推理方面干不过NPU,这里我借用经常使用的RK3399来对比

    2024年02月11日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包