[C语言练习题 8] 整型在内存中的存储练习题(含7道)

目录

练习1

练习2

练习3

练习4

练习5

练习6 

练习7 


本篇博客是对整型在内存中的存储练习

练习1

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

分析:

[C语言练习题 8] 整型在内存中的存储练习题(含7道)_第1张图片

把-1的补码存到a中,a只有 一个字节,一个字节是8个比特位,要发生截断,发生截断会把这个数字最低的8个比特位存起来,所以

[C语言练习题 8] 整型在内存中的存储练习题(含7道)_第2张图片

 当使用a的时候要看a的类型,当打印的时候,用到了类型,当我们要以整数的形式打印时,char达不到整型的大小,要发生整形提升:

[C语言练习题 8] 整型在内存中的存储练习题(含7道)_第3张图片

vs下 signed char 和 char 相同 ,所以a = b = -1

我们看c,c是无符号数,无符号高位统统补0

 因此c就是255

我们看打印结果:

[C语言练习题 8] 整型在内存中的存储练习题(含7道)_第4张图片

 

练习2

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

分析:

[C语言练习题 8] 整型在内存中的存储练习题(含7道)_第5张图片

 符号位时1 ,发生整形提升高位补1

因此最终我们发在计算器下算一下

[C语言练习题 8] 整型在内存中的存储练习题(含7道)_第6张图片

 我们来看运算结果:

[C语言练习题 8] 整型在内存中的存储练习题(含7道)_第7张图片

 [C语言练习题 8] 整型在内存中的存储练习题(含7道)_第8张图片

 

练习3

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

 分析: 与练习2道理相同

[C语言练习题 8] 整型在内存中的存储练习题(含7道)_第9张图片

 也是这个数字

[C语言练习题 8] 整型在内存中的存储练习题(含7道)_第10张图片

 

练习4

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

 分析:

我们还是写出对应的二进制

[C语言练习题 8] 整型在内存中的存储练习题(含7道)_第11张图片

 结果演示:

[C语言练习题 8] 整型在内存中的存储练习题(含7道)_第12张图片

练习5

//练习5
int main()
{
	unsigned int i;
	for (i = 9; i >= 0; i--)
	{
		printf("%u\n", i);
	}
	return 0;
}

分析:

[C语言练习题 8] 整型在内存中的存储练习题(含7道)_第13张图片

 再减 变成-1

[C语言练习题 8] 整型在内存中的存储练习题(含7道)_第14张图片

 [C语言练习题 8] 整型在内存中的存储练习题(含7道)_第15张图片

 再减又陷入死循环

[C语言练习题 8] 整型在内存中的存储练习题(含7道)_第16张图片

 [C语言练习题 8] 整型在内存中的存储练习题(含7道)_第17张图片

 我们看最终效果:

[C语言练习题 8] 整型在内存中的存储练习题(含7道)_第18张图片

练习6 

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

首先开辟一个a数组

 我们当i=0,i=-1分别讨论放在里面[C语言练习题 8] 整型在内存中的存储练习题(含7道)_第19张图片

 在这里我们讨论:一个char类型的变量中到底能放什么数值???

[C语言练习题 8] 整型在内存中的存储练习题(含7道)_第20张图片

 我们可以画一个⚪来表示

[C语言练习题 8] 整型在内存中的存储练习题(含7道)_第21张图片

 因此我们可以推广一下:

[C语言练习题 8] 整型在内存中的存储练习题(含7道)_第22张图片

 我们在回到这个题,那这个数组最终会被初始化成-1,-2.....-128,127,126....3,2,1,0.-1,-2....开辟1000个数字

[C语言练习题 8] 整型在内存中的存储练习题(含7道)_第23张图片

 那我们知道strlen遇到'\0'会停止,'\0'对应的ASCII码值时0,因此我们只需要统计第一次遇到0前又多少个字符就好了

 ,最终有128+127 = 255个

我们看最终打印结果:

[C语言练习题 8] 整型在内存中的存储练习题(含7道)_第24张图片

练习7 

unsigned char i = 0;
int main()
{
	for (i = 0; i <= 255; i++)
	{
		printf("Hello\n");
	}
	return 0;
}

 分析:再上一个题我们知道无符号char的取值范围是0-255

[C语言练习题 8] 整型在内存中的存储练习题(含7道)_第25张图片

[C语言练习题 8] 整型在内存中的存储练习题(含7道)_第26张图片

 因此程序i不可能大于255,因此会无限的打印Hello

我们来看打印结果:

[C语言练习题 8] 整型在内存中的存储练习题(含7道)_第27张图片

 结论:

本篇博客通过7道练习题,较为全面的对整型数字在内存中的存储有了一定的练习和巩固,虽然题目很变态,平常我们也不会这么写,但是通过这些题,我们可以更加了解整型在内存中到底是如何存储的,可以提高我们的内功,可以更好的拿捏~~哈哈哈

Tip:如果大家对整形在内存中的存储还不是很了解的话,大家可以点击下面这条链接加深印象:

[ 进阶C语言 ]之------数据在内存中的存储_小白又菜的博客-CSDN博客

最后如果大家觉得,这几道题做完自己有一定的收获和进步的话,麻烦各位小伙伴可以三连一波,嘿嘿~我们下篇见啦。

 

 

你可能感兴趣的:(C语言,c语言,开发语言,后端)