为什么会做整型提升
通常情况下,在对int类型的数值作运算时,CPU的运算速度是最快的。在x86上,32位算术运算的速度比16位算术运算的速度快一倍。C语言是一个注重 效率的语言,所以它会作整型提升,使得程序的运行速度尽可能地快。因此,你必须记住整型提升规则,以免发生一些整型溢出的问题。
整型提升的一些案例
printf(“sizeof(‘A’) = %d”, sizeof(‘A’));
//4
字符’A’的ASCII码,int类型,占用四个字节
char a, b;
printf(“sizeof(a+b)=%d”, sizeof(a+b));
//4
两个cha类型相加的值会作整型提升到int,结果仍然为4
char a, b, c;
printf(“sizeof(c=a+b)=%d”, sizeof(c=a+b));
//1
字符ab的值相加赋值到c,sizeof算的是隐式类型转换后,截断后类型的长度,为1
哪些类型会在计算时作整型提升
signed char: -127 -> 127
unsigned char: 0 -> 255
signed short: -32767 -> 32767
unsigned short: 0 -> 65535
signed int: -2147483647 -> 2147483647
我的BUG
tb变量是unsigned char类型,在作计算时会作整型提升最终导致结果: