当前位置:网站首页>一文让你快速了解隐式类型转换【整型提升】!
一文让你快速了解隐式类型转换【整型提升】!
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. 结语
兄弟们,记住了!如果觉得写的不错,来个一键三连呗!!!!!!!!!!!!!!!
边栏推荐
- 孙正义亏掉1500亿:当初投贵了
- AI Knows Everything: Building and Deploying a Sign Language Recognition System from Zero
- knn到底咋回事?
- APP自动化测试框架-UiAutomator2基础入门
- LeetCode26:删除有序数组中的重复项
- Xiaohei's leetcode journey: 94. Inorder traversal of binary trees (supplementary Morris inorder traversal)
- 2022 首期线下 Workshop!面向应用开发者们的数据应用体验日来了 | TiDB Workshop Day
- 从产品角度看 L2 应用:为什么说这是一个游乐场?
- supervisor 命令操作大全「建议收藏」
- 小黑leetcode清爽雨天之旅,刚吃完宇飞牛肉面、麻辣烫和啤酒:112. 路径总和
猜你喜欢
4D Summary: 38 Knowledge Points of Distributed Systems
Interpretation of the paper (DropEdge) "DropEdge: Towards Deep Graph Convolutional Networks on Node Classification"
从产品角度看 L2 应用:为什么说这是一个游乐场?
Several ways to draw timeline diagrams
同步锁synchronized追本溯源
AI Knows Everything: Building and Deploying a Sign Language Recognition System from Zero
如何让您的公司内容满足 GDPR 合规性
在“企业通讯录”的盲区,融云的边界与分寸
筑牢安全防线 鹤壁经济技术开发区开展安全生产培训
How to Make Your Company Content GDPR Compliant
随机推荐
小黑leetcode清爽雨天之旅,刚吃完宇飞牛肉面、麻辣烫和啤酒:112. 路径总和
Leetcode 93 复原IP地址
角度和弧度的相互换算
凸集与凸函数
从源码方面来分析Fragment管理中 Add() 方法
SecureCRT背景配色
Multiple reasons for MySQL slow query
《强化学习周刊》第57期:DL-DRL、FedDRL & Deep VULMAN
Tensorflow中placeholder函数的用法
技术分享 | 接口自动化测试之JSON Schema模式该如何使用?
json case
The kvm virtual machine cannot be started, NOT available, and the PV is larger than the partition
Interpretation of the paper (DropEdge) "DropEdge: Towards Deep Graph Convolutional Networks on Node Classification"
Leetcode 93 IP addresses
论文解读(DropEdge)《DropEdge: Towards Deep Graph Convolutional Networks on Node Classification》
Cookie、session、token
编程语言中,取余和取模的区别
Use zeros(), ones(), fill() methods to generate data in TF
重要的不是成为海贼王,而是像路飞一样去冒险
Referenced file contains errors 完美解决方法