目录
signed、unsigned 关键字补充内容
关于大端和小端
大小端存储数据方式
判断大小端
深入理解数据存储
练习:
写在最后:
signed、unsigned 关键字补充内容
关于大端和小端
我们通过在内存中存储一个值,
用于观察数据在内存中的存储形式。
如下:
例:
字符 a
十进制:-10(所以用十进制打印的结果)
原码:10000000 00000000 00000000 00001010
反码:11111111 11111111 11111111 11110101
补码:11111111 11111111 11111111 11110110(存入内存)
十六进制:ff ff ff f6(在内存中显示的结果)
通过调试观察:
而在内存中存储的却是:f6 ff ff ff
因为我们VS2019的环境是小端存储。
存储方式如下图:
大小端存储数据方式
数据是按照字节为单位存储的,
int 类型是四个字节。
每个字节都有地址,而地址有高地址和低地址之分。
直接说结论:
1.大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;
2.小端模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中。
所以我们观察到的数据就是以字节为单位反着存储。
再举一个小端存储的例子:
这就是小端存储的形式。
总结:
大端存储其实就是正着存,小端则是反着存。
那我们该如何判断呢?
判断大小端
例:
#include <stdio.h>
int main()
{
int a = 1;
char* pa = (char*)&a;
if (*pa == 1)//通过观察内存中第一个字节是否为1
{ //从而判断大小端
printf("小端\n");
}
else
{
printf("大端\n");
}
return 0;
}
输出:
输出:小端
深入理解数据存储
关于 char 类型的取值范围:
char 是八个比特位,一个符号位,剩下七个数值位。
也就是最小是-127,
最大是127。
但是,
00 00 00 00 与 10 00 00 00
这两组数,00 00 00 00 已经表示0了,那另外一组数据该如何表示?
它表示:-128
所以char 类型的大小是:[ -128 ~ 127 ]。
练习:
#include <stdio.h>
int main()
{
char a[1000];
int i;
for (i = 0; i < 1000; i++)
{
a[i] = -1 - i;//从-1、-2...-128一直遍历到127,然后再加一等于0
} //所以总共是128+127=255
//strlen遇到\0结束
printf("%d", strlen(a));
return 0;
}
输出:
输出:255
写在最后:
以上就是本篇文章的内容了,感谢你的阅读。
如果喜欢本文的话,欢迎点赞和评论,写下你的见解。
如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。
之后我还会输出更多高质量内容,欢迎收看。