C语言计算char/short/int的最大值和最小值

假设我们不知道目标平台的char、short、int长度是多少个字节,如何得到这个类型的最大值和最小值?

简单思考过后,我觉得可以采用无符号的最大值再右移1位的方式来得到有符号整数的最大值,把这个值取反又能得到最小值。 使用下面的C语言代码进行验证,发现打印值是正确的。 把代码中的 int 换成 char 和 short 都能正常打印出最大值和最小值。

void main(void)
{
	unsigned int tmp;
	int max_val;
	int min_val;
	tmp = 0 - 1;
	tmp = tmp >> 1;
	max_val = tmp;
	min_val = ~tmp;
	printf("min=%d, max=%d\n", min_val, max_val);
	system("pause");
}