【C语言】int a = 10是怎么存的?
视频链接: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=-1signed char b = -1;//与上述相同unsigned char c = -1;//11111111 截断补码存储的//00000000 00000000 00000000 11111111--整型提升 %d=255printf("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;
}