当前位置: 首页 > news >正文

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

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

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

给出代码实例↓

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




 

 

 

相关文章:

  • 电脑出现蓝屏英文怎么办?查看修复过程
  • 介绍几款免费的显示器辅助工具!
  • Windows系统中常用的命令
  • 如何使用ADB进行WIFI调试
  • 零售行业线下门店的AI知识库应用实践
  • 可视化实操记录(自用)
  • uniapp + vite + 使用多个 ui 库
  • 2025Java面试题超详细整理《微服务篇》
  • 【音视频】RTSP拉流: RTP负载AAC详解(三)
  • redis cluster测试
  • Linux笔记:Vim编辑器基本操作笔记
  • BDD风格测试
  • Golang协程调度模型MPG
  • 基于Swift实现仿IOS闹钟
  • .Net使用EF Core框架如何连接Oracle
  • Django 创建表 choices的妙用:get_<field_name>_display()
  • 2025年智慧城市解决方案下载:AI-超脑中台,体系架构整体设计
  • CodeGPT + IDEA + DeepSeek,在IDEA中引入DeepSeek实现AI智能开发
  • Office hour 1
  • 对比 LVS 负载均衡群集的 NAT 模式和 DR 模式,其各自的优势
  • 受贿3501万余元,中石油原董事长王宜林一审被判13年
  • 比特币挖矿公司GRYP股价涨超171%:将与特朗普儿子创设的公司合并
  • 区域国别学视域下的东亚文化交涉
  • 十大券商看后市|A股中枢有望逐步震荡抬升,把握结构性行情
  • 中方发布会:中美经贸高层会谈取得了实质性进展,达成了重要共识
  • 中国工程院院士、国医大师石学敏逝世