隐式类型转换之整型提升:
有符号数:负数是整型提升补1,正数的整型提升补0
无符号数的整型提升直接补0char类型为有符号数,即有正负,1type=8bit
整型截留:从低位到高位截留;char,short类型都必须参与运算时都必须整型提升为int类型才能参与运算;
相关代码1:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
char a = 3;
//000000000000000000000000 00000011 -- 3
//00000011 --char a的整型截留
//00000000000000000000000001111111 -- 127
//01111111 --char b的整型截留
//00000000000000000000000000000011 --char a的整型提升,因为char为有符号数,正数补0
//00000000000000000000000001111111 --char b的整型提升
//00000000000000000000000010000010 --char a的整型提升 + char b的整型提升
//10000010 -- c
//11111111111111111111111110000010 --补码 char c的整型提升
//11111111111111111111111110000001 --反码
//10000000000000000000000001111110 --原码
//11111110 --char c的整型截留
// -126
char b = 127;
char c = a + b;
printf("c = %d\n", c);
return 0;
}
执行结果如下:
相关代码2:
char c只要参与表达式的运算就会发生整型提升;
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
//%u表示无符号十进制整数
char c = 1;
printf("%u\n", sizeof(c)); //1
printf("%u\n", sizeof(+c));//4 -- char c只要参与表达式的运算就会发生整型提升
printf("%u\n", sizeof(-c));//4 -- char c只要参与表达式的运算就会发生整型提升
printf("%u\n", sizeof(!c));//1 -- !c是逻辑运算,不是算术运算,不会提升
return 0;
}
执行结果如下: