类型的意义:
1. 使用这个类型开辟内存空间的大小(大小决定了使用范围)。
2. 如何看待内存空间的视角。(float和int都是4字节,但是在内存中存储的方式不同)
数据类型
整型家族:
浮点数家族:
构造类型:
指针类型:
空类型:
void 表示空类型(无类型)
通常应用于函数的返回类型(无返回值)、函数的参数(添加在无参数传递的函数定义里,不允许参数传递)、指针类型
整形在内存中的存储
1.有符号数
正数:原码、反码、补码相同。
负数:原码、反码、补码不同,要进行计算。
2.无符号数
原码、反码、补码相同。
对于整形来说:数据存放内存中其实存放的是补码。
加法和减法也可以统一处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程
是相同的,不需要额外的硬件电路。
大端小端-大小端字节序
大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址
中;
小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中。
整型在内存中其补码是怎么存储的
1.有符号存储(8bit为例)
8bit补码一共有256种可能性,当第8位(符号位)为0时为正数(原反补一致)直接二进制转十进制,范围是0-127(0111_1111)。当符号位为1时是负数(需要先将补码换成原码),范围是-1(1111_1111)-(-128)(1000_0000),其中-127(1000_0001),所以8bit内存存贮的整形范围是-128-127。其他整型类似。
int main()
{
char a=128;//128和-128只有符号位不同(四字节存储),128转补码截断后的8位补码与-128相同
printf("%d",a);//因为a是有符号数,由上行相同补码整型提升至相同四字节补码,
//所以,打印有符号位结果是-128 ,无符号四字节补码直接输出,
//两者(128和-128)结果都是4294967168
return 0;
}
2.无符号存储(8bit为例)
8bit补码一共有256种可能性,无符号整形的原反补一致,所补码二进制直接转十进制。范围为0(0000_0000)-255(1111_1111)。
使用短整型注意整型提升和截断
赋值需要整型原码转补码再截断。
使用时几乎都要整型提升,然后按照提升规则将提升后的补码转原码使用。
其他
多字节数据类型的首地址都是从低地址开始算。
指针类型的转换不会对存入其中的地址进行改变,改变的从这个地址开始解引用的方式(访问空间和翻译方式),可以通过指针的类型转换拿到变量首字节存储的值。
%d-打印十进制的有符号数字
%u-打印十进制的无符号数字