一,基本数据类型
——系统内置类型
char //字符型 1字节
short //短整型 2字节
int //整型 4字节
long int //长整型 4/8字节
long long int //长长整型 8字节
float //单精度浮点型 4字节
double //双精度浮点型 8字节
具体数值范围:
1.1整型的基本归类
char //字符类型在存储的时候是以ASCⅡ码存储
unsigned char signed char
short
unsigned short signed short
int
unsigned int signed int
long
unsigned long signed long
1.2浮点数
float
double
1.3构造 //又称自定义类型
数组类型
结构体类型 struct
枚举类型 enum
联合类型 union
1.4指针类型
结构体指针
函数指针
数组指针
......
二,数据在内存的存储
2.1原码,反码,补码
计算机中整型有三种二进制存储形式,即原码,反码,补码。三者均有“符号位”与“数值位”,
正数符号位为“0”,复数符号位为“1”。
正数存储为原码,负数存储为补码。
原码:整型数据的二进制表示即为原码
反码:根据原码,除符号位以外的数值依次取反
补码:反码+1
在内存的体现
&a
&b
为方便表示数据,vs此处显示的是16进制。
a为正数,在内存中的原反补相同
->二进制:0000 0000 0000 0000 0000 0000 0000 0011
->十六进制: 0 0 0 0 0 0 0 3
b为负数,存储方式为补码
原:1000 0000 0000 0000 0000 0000 0000 0010
反:1111 1111 1111 1111 1111 1111 1111 1101
补:1111 1111 1111 1111 1111 1111 1111 1110
->十六进制:f f f f f f f e
如上图所示
但是,为何顺序是颠倒的?这牵扯到编译器大小端问题。
2.2什么是大小端
大端存储:意指数据的低位存储到内存的高位上,数据高位存储到内存的低位上
小端存储:意指数据的低位存储到内存的低位上,数据高位存储到内存的高位上
内存存储位序为
低--------------------------------------------》高
上图的 03 00 00 00 即为低至高
易知此设备为小端存储。
代码检测设备的大小端
如下代码检测设备大小端
上图代码解析:
i 的十六进制为:00 00 00 01
大端: 00 00 00 01
小端: 01 00 00 00
将其&(取地址)获得它的首位地址
后强制类型转换为 char* ,因char为1字节,所以解引用后只能取到1字节位的数。
若取出为1,即为小端,取出为0,即为大端。
该方法利用了联合的特性,逻辑与上相同。