当前位置:网站首页>This article lets you quickly understand implicit type conversion [integral promotion]!

This article lets you quickly understand implicit type conversion [integral promotion]!

2022-08-09 23:43:00 A programmer who wants to punch

0.隐式类型转换[整型提升]

C的整型算术运算总是至少以缺省整型的精度来进行的.为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整形提升.简单来说就是,少于4The type operation of a byte will be automatically converted according to certain rulesint或者unsigned int进行运算.

char a,b,c;
a = b + c;
//在进行b+c运算时,因为b和c都为char类型,一个字节,
//所以b和cwill be promoted to ordinary integer,然后再执行加法运算.
//加法运算完成之后,结果将被截断(从后往前截取4个bit位),然后再存储于a中.

1.如何进行整形提升呢?

Integer promotion is based on the data type of the variable符号位来提升的.

1.1 负数的整形提升【高位补符号位】

char c = -1:
//Data exists in memory in two's complement form!

在这里插入图片描述

变量c的二进制位(补码)中只有8个bit位:11111111,因为char为有符号的char ,So when it comes to shaping,高位补充符号位,补充1,The result bit after shaping and boosting11111111111111111111111111111111.
在这里插入图片描述

1.2 正数的整形提升【高位补符号位】

char c = 1;

在这里插入图片描述

变量c的二进制位(补码)中只有8个bit位:00000001,因为char为有符号的char ,So when it comes to shaping,高位补充符号位,补充0,The result bit after shaping and boosting00000000000000000000000000000001.
在这里插入图片描述

1.3无符号整形提升,高位补0

unsigned char c = -1;

在这里插入图片描述
变量c的二进制位(补码)中只有8个bit位:11111111,因为char为无符号的char ,So when it comes to shaping,高位补充0,The result bit after shaping and boosting00000000000000000000000011111111.
在这里插入图片描述

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;
}

cJust participate in the operation of the expression,就会发生整形提升,所以只有sizeof(c)为1个字节,Others have undergone plastic lifting,变成了4个字节.

3. 结语

兄弟们,记住了!如果觉得写的不错,来个一键三连呗!!!!!!!!!!!!!!!
在这里插入图片描述

原网站

版权声明
本文为[A programmer who wants to punch]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/221/202208092001328810.html