3.自定义类型
1.内存对齐
主要考虑两个因素
第一个就是cpu读取效率问题,内存对齐后可以提高缓存的命中率,现代cpu主要是按快读取内存的,如果数据边界对齐,可以大大提高读取效率
第二个就是跨平台原因,不是所有平台都能随机读取,要考虑平台的兼容性,内存对齐可以挺高可移植性
2.联合
union一般是首个元素空间兼容后面元素空间 , 会出现覆盖现象 不太常用,主要就是空间节省但是现在空间也不值钱所以感觉也不太有用
4.数据存储
1.整形存储规则,原反补
正数原反补相同
1
00000000000000000000000000000001 原
00000000000000000000000000000001 反
00000000000000000000000000000001 补
负数
-1
10000000000000000000000000000001 原
11111111111111111111111111111110 反 除符号位 按位取反
11111111111111111111111111111111 补 反码+1
2.大小端如何判断
小端:数据低位保存在地址低位, 数据高位保存在地址高位
大端:数据高位保存在地址低位,数据低位保存在地址高位
//判断大小端
int i = 1;
if ((char)i == 1)
{
std::cout << "小段" << std::endl;
}
if ((char)i == 0)
{
std::cout << "大端" << std::endl;
}
3.类型提升和截断
提升:计算过程中 , 会将较小的数据类型自动转换成较大的操作数类型
截断:将较大的数据类型,强制类型转换或者赋值的时候会截断;