1.整型提升
表达式中各种长度小于int的整型值(字符和短整型
),都必须转换成int或unsigned int,然后才能送去CPU去执行运算。
如何进行整型提升
按照变量的数据类型的符号位来提升。(符号位是1补充1,是0补充0)
- char到底是signed还是unsigned是不确定的,取决于编译器。(C语言标准没有明确指定)
- 在我当前使用的vs上 ,char==signed char
接下来举几个例子:
例一
例二
0x是16进制表示格式
输出结果是c
![]()
右上角是调试窗口(a,b,c的值)
![]()
因为有整型升级,a和b的值变成负数而原本的0xb6和0xb600是正数。只有不用整型升级的c不会改变。
![]()
例三
例四
例五
2. 算术转换
如果某个操作符的各个操作数属于不同的类型,那么除非把其中一个操作数转换为另外一个操作数的类型,否则操作无法进行。下面的层次体系称为寻常算术转换。(把小的转换为大的)
long double
double
float
unsigned long int
long int
unsigned int
int
从上往下依次减小
举例说明
sizeof计算的结果是size_t类型,操作符“>”的两个操作数属于不同的类型,i算术转换为size_t类型,是无符号的,所以是很大的正数。