定義:
C的整型算術運算總是至少以預設整型類型的精度來進行的。
為了獲得這個精度,表達式中那些小于整型操作數的:(字元和短整型操作數)在使用之前被轉換為普通整型,這種轉換稱為整型提升。
例子1:
#include <stdio.h>
#include <stdlib.h>
int main() {
char a = 3;
//因為char不滿4Bety,要進行整型提升。因為char是有符号的char 提升時補最高位0.
//3的補碼為 00000000 00000000 00000000 00000011
//00000011 存入a中。
char b = 127;
//因為char不滿4Bety,要進行整型提升。因為char是有符号的char 提升時補最高位0.
//127的補碼為 00000000 00000000 00000000 01111111
//01111111 存入b中。
char c = a + b;
// 00000000 00000000 00000000 00000011
// +00000000 00000000 00000000 01111111
// -------------------------------------
// 00000000 00000000 00000000 10000010
// 10000010 存入c中,再進行整型提升:補最高位1.
// 11111111 11111111 11111111 10000010//c的補碼
// 11111111 11111111 11111111 10000001//c的反碼
// 10000000 00000000 00000000 01111110//c的原碼== -126
printf("%d", c);//-126
}
例子2:
#include <stdio.h>
int main() {
char a = 0xb6;
//a- 10110110
short b = 0xb600;
//b- 10110110 00000000
int c = 0xb6000000;
//c- 10110110 00000000 00000000 00000000
if (a == 0xb6)
//a 整型提升:11111111 11111111 11111111 10110110 不等于 0xb6
printf("a");//不列印
if (b == 0xb600)
//b 整型提升:11111111 11111111 10110110 00000000 不等于 0xb6
printf("b");//不列印
if (c == 0xb6000000)//c不用提升,二者直接就相等
printf("c");//列印
return 0;
}
例子3:
#include <stdio.h>
int main()
{
char c = 1;
//c- 00000001
printf("%u\n", sizeof(c));//列印1
printf("%u\n", sizeof(+c));//c整型提升00000000 00000000 00000000 00000001 列印4
printf("%u\n", sizeof(!c));//列印1
return 0;
}