天天看點

C語言:整型提升。

定義:

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;
}
           

繼續閱讀