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

小小笔记-整型提升(C语言),第1张

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

写在前面

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

整形提升
  • 整形提升概念

🍐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,最高位为符号位
打印的值为-128unsigned int形式打印:最高位不是符号位
打印的值为4294967168
最后

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1498711.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-25
下一篇 2022-06-25

发表评论

登录后才能评论

评论列表(0条)

保存