【c语言】整型提升习题

1.

int main()
{
	char a = -1;
	signed char b = -1;
	unsigned char c = -1;
	printf("a=%d ,b=%d,c=%d", a, b, c);
	system("pause");
	return 0;
}

结果为 -1,-1,255
分析:
a是char,可以放8个比特位,但它是整数有32个比特位,
1111111111111111111111111111111取8位,a的存储为11111111
,要%d输出所以a整型提升,a是有符号位,高位补符号位变为1111111111111111111111111111111,所以a输出为-1;b与a相同,c为无符号类型,补高位补0,变为00000000000000000000000011111111,%d输出,符号位为0,是正数,正数的原反补码相同所以为255.
2.

int main()
{
	char a = -128;
	printf("%u\n", a);
	system("pause");
	return 0;
}

答案为:429496716
分析:
a是-128,-128的原码为1000000000000000000000010000000,取反加1的补码为111111111111111111111111110000000,char类型能存储8位,为10000000,%u无符号整型打印,整形提升为11111111111111111111111110000000,无符号打印,所以11111111111111111111111110000000为原码,即为所求。
3

int main()
{
	char a = 128;
	printf("%u\n", a);
	system("pause");
	return 0;
}

结果和上题相同`
4.


int main()
{
	int i = -20;
	unsigned int j = 10;
	printf("%d\n", i+j);
	system("pause");
	return 0;
}

运行结果为:-10
分析:
-20原码:10000000000000000000000000010100补码为:11111111111111111111111111101100,10补码为000000000000000000000000001010 ,相加结果为111111111111111111111111110110,%d打印是原码,补码-1取反为1000000000000000000000000001010是 -10
5.:

int main()
{
	unsigned i ;
	for (i = 9; i >= 0; i--)
	{
		printf("%u\n", i);
	}
	
	system("pause");
	return 0;
}

结果为死循环,因为unsigned定义的是没有小于0的数
6.

int main()
{
	char a[1000];
	int i;
	for (i = 0; i <1000; i++)
	{
		a[i] = -1 - i;
	}
	printf("%d", strlen(a));
	system("pause");
	return 0;
}

结果为255
分析:
// -1 -2 -3 —— —— —— -128 127 126 ——————3 2 1 0 -1 -2 -3 strlen找到0截至前面是255个
7.

int main()
{
	short num = 32767;
	short int a = num + 1;
	printf("%d\n",a);
	system("pause");
	return 0;
}

结果为-32768
**分析:**32767是2的16次方-1,短整型表示的正的最大值,加1变为-32768,短整型能表示的最大值加1变为最小值,char最大的127加1变为-128.
8.

unsigned char i = 0;
int main()
{
	for (i = 0; i <= 255; i++)
	{
		puts("hello world\n");
	}
	system("pause");
	return 0;
}

结果为死循环,因为unsigned最大值为255。

猜你喜欢

转载自blog.csdn.net/weixin_41892460/article/details/82746146
今日推荐