当前位置:网站首页>一文让你快速了解隐式类型转换【整型提升】!
一文让你快速了解隐式类型转换【整型提升】!
2022-08-09 21:51:00 【一个想打拳的程序员】
0.隐式类型转换[整型提升]
C的整型算术运算总是至少以缺省整型的精度来进行的。为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整形提升。简单来说就是,少于4个字节的类型运算时会自动根据某些规则转成int或者unsigned int进行运算。
char a,b,c;
a = b + c;
//在进行b+c运算时,因为b和c都为char类型,一个字节,
//所以b和c都会提升为普通整型,然后再执行加法运算。
//加法运算完成之后,结果将被截断(从后往前截取4个bit位),然后再存储于a中。
1.如何进行整形提升呢?
整形的提升是按照变量的数据类型的符号位来提升的。
1.1 负数的整形提升【高位补符号位】
char c = -1:
//数据在内存中是以补码的形式存在的!
变量c的二进制位(补码)中只有8个bit位:11111111,因为char为有符号的char ,所以在整形提升的时候,高位补充符号位,补充1,经过整形提升后的结果位11111111111111111111111111111111.
1.2 正数的整形提升【高位补符号位】
char c = 1;
变量c的二进制位(补码)中只有8个bit位:00000001,因为char为有符号的char ,所以在整形提升的时候,高位补充符号位,补充0,经过整形提升后的结果位00000000000000000000000000000001.
1.3无符号整形提升,高位补0
unsigned char c = -1;
变量c的二进制位(补码)中只有8个bit位:11111111,因为char为无符号的char ,所以在整形提升的时候,高位补充0,经过整形提升后的结果位00000000000000000000000011111111.
2 整形提升的例子
2.1 例1
int main()
{
char a = 0xb6;
short b = 0xb600;
int c = 0xb6000000;
if(a==0xb6)
printf("a");
if(b==0xb600)
printf("b");
if(c==0xb6000000)
printf("c");
return 0;
}
这个程序的结果是什么呢!很明显是:c
因为a、b要进行整型提升,但是c不需要整型提升。
2.2 例2
int main()
{
char c = 1;
printf("%u\n",sizeof(c)); //1
printf("%u\n",sizeof(+c));//4
printf("%u\n",sizeof(-c));//4
return 0;
}
c只要参加表达式的运算,就会发生整形提升,所以只有sizeof(c)为1个字节,其他发生整形提升后,变成了4个字节。
3. 结语
兄弟们,记住了!如果觉得写的不错,来个一键三连呗!!!!!!!!!!!!!!!
边栏推荐
- 2022 首期线下 Workshop!面向应用开发者们的数据应用体验日来了 | TiDB Workshop Day
- mysql配置参数详解[通俗易懂]
- Interpretation of the paper (DropEdge) "DropEdge: Towards Deep Graph Convolutional Networks on Node Classification"
- 上海控安SmartRocket系列产品推介(三):SmartRocket iVerifier计算机联锁系统验证工具
- The kvm virtual machine cannot be started, NOT available, and the PV is larger than the partition
- 孙正义亏掉1500亿:当初投贵了
- mysql multi-table left link query
- AI Knows Everything: Building and Deploying a Sign Language Recognition System from Zero
- POWER SOURCE ETA ETA Power Repair FHG24SX-U Overview
- laravel 表迁移报错[通俗易懂]
猜你喜欢
CVPR22 Oral|通过多尺度token聚合分流自注意力,代码已开源
同步锁synchronized追本溯源
Reinforcement Learning Weekly Issue 57: DL-DRL, FedDRL & Deep VULMAN
小黑leetcode清爽雨天之旅,刚吃完宇飞牛肉面、麻辣烫和啤酒:112. 路径总和
金山云地震,震源在字节?
《强化学习周刊》第57期:DL-DRL、FedDRL & Deep VULMAN
POWER SOURCE ETA ETA Power Repair FHG24SX-U Overview
Bean life cycle
【微服务~Nacos】Nacos之配置中心
kvm虚拟机出现启动不了,NOT available,PV大于分区
随机推荐
论文解读(DropEdge)《DropEdge: Towards Deep Graph Convolutional Networks on Node Classification》
Tensorflow模型整体构建流程
Easyui 表单验证「建议收藏」
Flask入门学习教程
knn到底咋回事?
Jensen (琴生) 不等式
从源码方面来分析Fragment管理中 Add() 方法
Flask之路由(app.route)详解
编程语言中,取余和取模的区别
Interpretation of the paper (DropEdge) "DropEdge: Towards Deep Graph Convolutional Networks on Node Classification"
同步锁synchronized追本溯源
上海控安SmartRocket系列产品推介(三):SmartRocket iVerifier计算机联锁系统验证工具
Sudoku | Backtrack-7
Technology Sharing | How to Handle Header Cookies in Interface Automation Testing
五星控股汪建国:以“植物精神”深耕赛道,用“动物精神”推动成长
MySQL:错误1153(08S01):得到的数据包大于“ max_allowed_packet”字节
[Implementation of the interface for adding, deleting, checking, and modifying a double-linked list]
深度剖析 Apache EventMesh 云原生分布式事件驱动架构
Endpoint mode for NetCore routing
SecureCRT background color