当前位置:网站首页>一文让你快速了解隐式类型转换【整型提升】!
一文让你快速了解隐式类型转换【整型提升】!
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. 结语
兄弟们,记住了!如果觉得写的不错,来个一键三连呗!!!!!!!!!!!!!!!
边栏推荐
- 【EF】 更新条目时出错。有关详细信息,请参见内部异常。[通俗易懂]
- Usage of placeholder function in Tensorflow
- TF中random.normal()与random.truncated_normal()
- Deceptive Dice
- laravel table migration error [easy to understand]
- 在“企业通讯录”的盲区,融云的边界与分寸
- [Generic Programming] Full Detailed Explanation of Templates
- 上海控安SmartRocket系列产品推介(三):SmartRocket iVerifier计算机联锁系统验证工具
- 小黑leetcode清爽雨天之旅,刚吃完宇飞牛肉面、麻辣烫和啤酒:112. 路径总和
- Tensorflow模型整体构建流程
猜你喜欢

kvm虚拟机出现启动不了,NOT available,PV大于分区

Pagoda measurement - building LightPicture open source map bed system

APP automation test framework - UiAutomator2 introductory

abstract class or interface

论文解读(DropEdge)《DropEdge: Towards Deep Graph Convolutional Networks on Node Classification》

RHEL7系统修复rm -rf /boot /etc/fstab

TRUNCATE表之后空间未释放

CVPR22 Oral | shunt through multi-scale token polymerization from attention, code is open source

2022 首期线下 Workshop!面向应用开发者们的数据应用体验日来了 | TiDB Workshop Day
Quotefancy ,提供鼓舞人心语录的壁纸网站 - 倾城之链
随机推荐
深度剖析 Apache EventMesh 云原生分布式事件驱动架构
Bean生命周期
Sudoku | Backtrack-7
AI Knows Everything: Building and Deploying a Sign Language Recognition System from Zero
Reinforcement Learning Weekly Issue 57: DL-DRL, FedDRL & Deep VULMAN
Leetcode 93 复原IP地址
从产品角度看 L2 应用:为什么说这是一个游乐场?
leetcode: the Kth largest element in the array
上海控安SmartRocket系列产品推介(三):SmartRocket iVerifier计算机联锁系统验证工具
Word文档怎么输入无穷大符号∞
2022 首期线下 Workshop!面向应用开发者们的数据应用体验日来了 | TiDB Workshop Day
STC8H开发(十五): GPIO驱动Ci24R1无线模块
Usage of placeholder function in Tensorflow
json case
PHP 2D array sorted by a field
【stack】【queue】【priority_queue】【deque】Detailed explanation
LeetCode26: remove duplicates in sorted array
任务流执行器是如何工作的?
论文解读(DropEdge)《DropEdge: Towards Deep Graph Convolutional Networks on Node Classification》
abstract class or interface