- 写在前面
- 整形提升
- 最后
总算把学校的实训搞完了😄,现在开始正常更新。
大家好,这里是风扇的小小笔记,本篇笔记简单记录了整形提升的概念、意义以及简单的示例,感谢各位的支持。
- 整形提升概念
🍐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
最后
以上位本篇笔记的全部内容,原码、反码和补码在上一篇文章讲过了故这次就讲的比较粗略。
最后感谢各位对小风扇的支持,一起努力啊!🚀
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)