C语言知识点——整型提升

目录

1. 整型提升的意义   

 2. 整型提升实现过程

 3. 示例及应用


一、整型提升的意义

C语言知识点——整型提升_第1张图片

                                                                                                                       ——摘自《百度百科》

这段话可以理解为,在表达式计算时,各种整型(如 short、long....等)首先要提升为int类型,如果int类型不足以表示则要提升为unsigned int类型;然后执行表达式的运算.


 二、整型提升的实现过程

1. 有符号整数的整型提升

高位补充符号位

char a=-1

负数在内存中以补码的形式存储,且char类型占一个字节,即8bit

故变量a的二进制补码为1111111

整型提升,高位补充符号位1,提升后为11111111111111111111111111111111

char a=1

正数的补码和原码相同,同理可得变量a的二进制补码为00000001

整型提升,高位补充符号位0,提升后为00000000000000000000000000000001

2. 无符号整数的整型提升

高位补0即可


三、示例及应用

想一想,下面这段代码结果为多少呢?

int main() {
    char a = 5;
    char b = 126;
    char c = a + b;
    printf("%d", c);
    return 0;
}

在VS2019上运行结果为,结果看着很符合计算常理,但其实数据在计算时的逻辑还是略显复杂的,需要我们一步步剖析。C语言知识点——整型提升_第2张图片

下面以注释的形式简要表示一下运算过程:

C语言知识点——整型提升_第3张图片

 下面把这道题换一个数,你还能算对吗?

int main() {
    char a = -1;
    char b = 200;
    char c = a + b;
    printf("%d", c);
    return 0;
}

怎么样,算对了吗? 答案为-57,很出乎意料吧,其实弄懂了原理后不难理解!

C语言知识点——整型提升_第4张图片

 C语言知识点——整型提升_第5张图片

 总结:

C语言中只要涉及表达式运算,不及int大小的变量就会发生整型提升,需注意!

你可能感兴趣的:(c语言,开发语言)