目录
1、数据类型的详细介绍
2、整型在内存中存储的原码、反码、补码。
3、大小端字节序介绍及判断
1、数据类型的详细介绍
首先目前学过的数据类型有:
整型:
char
shor
int
long
long long
浮点型:
float
double
构造类型:
数组类型
结构体 struct
枚举enum
联合体union
指针类型:
int * pi
char* pi
float* pi
void* pi
空类型
void
2、整型在内存中存储的原码、反码、补码。
数据在内存中是以2进制的形式存储的
对于整数来说
整数二进制有三种表示形式:原码、反码、补码。
正整数的原码、反码、补码是相同的
负数的原码、反码、补码是要进行计算的。
例如:
int main()
{
int a = -10;
return 0;
}
这里变量 a 的原码是
10000000 00000000 00000000 00001010 -原码
(注:最高位是符号位 0 为正数 ,1 为负数)
11111111111111111111111111111111110101 -反码
(符号位不变,其他位按位取反得到反码)
11111111111111111111111111111111110110-补码
(反码+1得到补码)
而整数在内存中的存储,存的就是补码
所以在内存中 应该是 ff ff ff f6
但是这里我们看到的又是 f6 ff ff ff
这是为什么呢?
3、大小端字节序的判断与介绍
上面我们所说,整数在内存中存储的应该是补码的形式
并且-10转换为补码的16进制应该是 ff ff ff f6
当我们看内存的时候却是 f6 ff ff ff
这时我们就要讨论大小端字节序了
什么事大小端字节序?
我们举一个例子:
int main()
{
int a = 0x11223344;
return 0;
}
我们假设左边是低地址,右边是高地址
如果我们低地址处放的内容是44 高地址处放的是11 则我们的编译器是小端存储
如果我们低地址处的内容放的是11,高地址处放的是44 则我们的编译器是大端存储
究竟是如何的呢? 让我们一起来看一下内存
可以看到 在内存中存储的样式是44 33 22 11
并且从左到右,从上到下的地址是增加的 由此可知我们在vs2019的编译器底下的存储方式是小端存储的
那么我们该如何用一个程序来判断某一个编译器是大端存储的还是小端存储的呢?
这里有一个简单的过程给大家展示
我们用一个字符型的指针来访问一个整型的第一个字节是多少 就可以判断该编译器是大端存储还是小端存储了。