欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 锐评 > C语言中隐式类型转换 截断和整型提升

C语言中隐式类型转换 截断和整型提升

2025/2/22 2:16:03 来源:https://blog.csdn.net/2402_87940708/article/details/145531504  浏览:    关键词:C语言中隐式类型转换 截断和整型提升

C的整形算数总是至少以缺省整形类型的精度来进行的

为了获得这个精度 表达式中的字符和短整形操作数在使用之前被转换为普通整形 这种类型转换成为整型提升

给出代码实例↓

#include<stdio.h>
int main()
{//char = signed charchar a = 3;char b = 127;char c = a + b;printf("%d", c);return 0;
}

正常来说结果为130 但是运行结果为什么是↓

 

为什么呢  这就牵扯到了整形提升(针对二进制的序列补码)

所谓的整形提升分为 有符号的 和 无符号的整形

对于有符号的最高位是0就补0 , 1就补1

无符号的全都补0

先从a看起3的普通整形是(4个字节)

a:00000000000000000000000000000011

但是a的类型是char (一个字节)此时就会发生截断保留后面八个比特位

a:00000011

b也是同样的原理 截断后

b:01111111

运算时 a,b会被提升为普通整形(32比特位)再进行运算

就会有

a:00000000000000000000000000000011

b:000000000000000000000000011111111

c:00000000000000000000000010000010

c是char类型 又会发生截断

c:10000010

%d是打印十进制的整数 c发生整形提升

11111111111111111111111110000010 补码

10000000000000000000000001111110  原码

二进制转换为十进制的结果位-126

#include<stdio.h>
int main()
{//char = signed charchar a = 3;//00000000000000000000000000000011//截断//00000011char b = 127;//00000000000000000000000001111111//01111111char c = a + b;//00000011//01111111//整形提升//00000000000000000000000000000011//00000000000000000000000001111111//00000000000000000000000010000010//10000010printf("%d", c);//c整形提升//11111111111111111111111110000010补码//10000000000000000000000001111110原码//-126return 0;
}

 

 

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词