视频链接:bilibili
深度剖析数据在内存中的存储
1.类型分为:内置类型和自定义类型
内置类型:char short int long longlong float double
类型的意义:
1.使用这个类型开辟内存空间的大小(大小决定了使用范围)
2.如何看待内存空间的视角
2.整型在内存中的存储
有符号整数:正数的原码反码补码相同
有符号整数:复数的原码反码补码不同
无符号整数:原码反码补码相同
而计算机进行存储时是以补码的形式进行存储(因为计算机只有加法器,以补码形式存储时可以将减法转换为加法)
3.什么是大端小端
大端:数据的低位保存在高地址中
小端:数据的高位保存在低地址中
定义一个函数,查看计算机是大端还是小端
#include <stdio.h>
int chack_sys()
{
int a = 1;
return *(char*)&a;//返回1大端,返回0小端
}
int main()
{
int ret = chack_sys();
if (ret)//返回值为1时,为大端
{
printf("大端");
}
else
{
printf("小端");
}
return 0;
}
4.一个char的存储范围是什么样的
无符号char的范围是0-255
有符号char的范围是-128-127
5.练习
思考下面的代码结果是什么
int main()
{
char a = -1;
//10000000 00000000 00000000 00000001--原码
//11111111 11111111 11111111 11111110--反码
//11111111 11111111 11111111 11111111--补码
//11111111 截断补码存储的
//11111111 11111111 11111111 11111111--整型提升 %d=-1
signed char b = -1;
//与上述相同
unsigned char c = -1;
//11111111 截断补码存储的
//00000000 00000000 00000000 11111111--整型提升 %d=255
printf("a = %d b = %d c = %d", a, b, c);
return 0;
}
int main()
{
char a = -128;//128时结果也是相同的
//10000000 00000000 00000000 10000000--原码
//11111111 11111111 11111111 01111111--反码
//11111111 11111111 11111111 10000000--补码
//10000000 截断补码存储的
//11111111111111111111111110000000--整型提升(补码)
printf("%u\n", a);//%u是无符号十进制的整数
return 0;
}
int main()
{
char arr[10] = { 1,2,3,4,0,1,2,3,4,5 };
printf("%d\n", strlen(arr));//4,strlen遇到0认为是\0,则停止计数
return 0;
}
int main()
{
char arr[1000];
int i = 0;
for (i = 0; i < 1000; i++)
{
arr[i] = -1 - i;
}
printf("%d\n", strlen(arr));//255,strlen遇到0认为是\0,则停止计数
return 0;
}
unsigned char i = 0;
int main()
{
for (i = 0; i <= 255; i++)
{
printf("hello world");//死循环
}
return 0;
}