目录
本篇博客是对整型在内存中的存储练习
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;
}
分析:
把-1的补码存到a中,a只有 一个字节,一个字节是8个比特位,要发生截断,发生截断会把这个数字最低的8个比特位存起来,所以
当使用a的时候要看a的类型,当打印的时候,用到了类型,当我们要以整数的形式打印时,char达不到整型的大小,要发生整形提升:
vs下 signed char 和 char 相同 ,所以a = b = -1
我们看c,c是无符号数,无符号高位统统补0
因此c就是255
我们看打印结果:
int main()
{
char a = -128;
printf("%u\n", a);
return 0;
}
分析:
符号位时1 ,发生整形提升高位补1
因此最终我们发在计算器下算一下
我们来看运算结果:
int main()
{
char a = 128;
printf("%u\n", a);
return 0;
}
分析: 与练习2道理相同
也是这个数字
//练习4
int main()
{
int i = -20;
unsigned int j = 10;
printf("%d\n", i + j);
return 0;
}
分析:
我们还是写出对应的二进制
结果演示:
//练习5
int main()
{
unsigned int i;
for (i = 9; i >= 0; i--)
{
printf("%u\n", i);
}
return 0;
}
分析:
再减 变成-1
再减又陷入死循环
我们看最终效果:
#include <string.h>
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分别讨论放在里面
在这里我们讨论:一个char类型的变量中到底能放什么数值???
我们可以画一个⚪来表示
因此我们可以推广一下:
我们在回到这个题,那这个数组最终会被初始化成-1,-2.....-128,127,126....3,2,1,0.-1,-2....开辟1000个数字
那我们知道strlen遇到'\0'会停止,'\0'对应的ASCII码值时0,因此我们只需要统计第一次遇到0前又多少个字符就好了
,最终有128+127 = 255个
我们看最终打印结果:
unsigned char i = 0;
int main()
{
for (i = 0; i <= 255; i++)
{
printf("Hello\n");
}
return 0;
}
分析:再上一个题我们知道无符号char的取值范围是0-255
因此程序i不可能大于255,因此会无限的打印Hello
我们来看打印结果:
结论:
本篇博客通过7道练习题,较为全面的对整型数字在内存中的存储有了一定的练习和巩固,虽然题目很变态,平常我们也不会这么写,但是通过这些题,我们可以更加了解整型在内存中到底是如何存储的,可以提高我们的内功,可以更好的拿捏~~哈哈哈
Tip:如果大家对整形在内存中的存储还不是很了解的话,大家可以点击下面这条链接加深印象:
[ 进阶C语言 ]之------数据在内存中的存储_小白又菜的博客-CSDN博客
最后如果大家觉得,这几道题做完自己有一定的收获和进步的话,麻烦各位小伙伴可以三连一波,嘿嘿~我们下篇见啦。