栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

小小笔记-整型提升(C语言)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

小小笔记-整型提升(C语言)

整型提升
  • 写在前面
  • 整形提升
  • 最后

写在前面

总算把学校的实训搞完了,现在开始正常更新。
大家好,这里是风扇的小小笔记,本篇笔记简单记录了整形提升的概念、意义以及简单的示例,感谢各位的支持。

整形提升
  • 整形提升概念

C的整型算术运算总是至少以缺省整型类型(int)的精度来进行的。为了达到这个精度,表达式中的字符型和短整型操作数在使用之前被转换为普通整型,这种转换称为整型
提升。

  • 整形提升意义

表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度
一般就是int的字节长度,同时也是CPU的通用寄存器的长度。
因此,即使两个char类型的相加,在CPU执行时实际上也要先转换为CPU内整型操作数的标准长
度。
通用CPU(general-purpose CPU)是难以直接实现两个8比特字节直接相加运算(虽然机器指令
中可能有这种字节相加指令)。所以,表达式中各种长度可能小于int长度的整型值,都必须先转
换为int或unsigned int,然后才能送入CPU去执行运算。

  • 整形提升规则
    ⭐️整形提升时高位补充符号位,无符号类型则高位补0.
  • 麗例子:
    以int型和unsigned int型来打印char型数据的过程
int main()
{
	char a = -128;
	//char 范围-128—127
	printf("%d %u",a, a);
	return 0;
}

运行结果:

a的值的储存过程:

10000000 00000000 00000000 10000000    -128的原码
 原码取反
11111111 11111111 11111111 01111111    -128的反码
反码加一
11111111 11111111 11111111 10000000    -128的补码
a的长度位1字节            a:10000000   补码截断,取最后一个字节

取出a的值:

                            10000000   a
 11111111 11111111 11111111 10000000   a整形提升
 补码减一
 11111111 11111111 11111111 01111111   提升后的a的反码
符号位不变,其他位取反
 10000000 00000000 00000000 10000000   提升之后a的原码
以int形式打印a,最高位为符号位
打印的值为-128
以unsigned int形式打印:最高位不是符号位
打印的值为4294967168
最后

以上位本篇笔记的全部内容,原码、反码和补码在上一篇文章讲过了故这次就讲的比较粗略。
最后感谢各位对小风扇的支持,一起努力啊!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/974916.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号