目录
本篇介绍:
- 数据类型详细介绍
- 整型在内存中的存储:原码、反码、补码
- 大小端字节序介绍及判断
一、数据类型介绍
基本内置类型:
char //字符数据类型
short //短整型
int //整型
long //长整型
long long //更长的整型
float //单精度浮点型
double //双精度浮点型
类型的意义:
使用这个类型开辟内存空间的大小(大小决定了使用范围)
类型的基本归类
整型:
char //字符存储表示的时候本质上使用的是ASCII码值,是整数。
//char 不一定等于 signed cahr 取决于编译器
unsigned char
signed char
short //默认是 signed 类型
unsigned short [int] //int 可以省略
signed short [int] //int 可以省略
int //默认是 signed 类型
unsigned int
signed int
long //默认是 signed 类型
unsigned long [int] //int 可以省略
signed long [int] //int 可以省略
浮点型
float //单精度浮点型
double //双精度浮点型
构造类型
数组类型
结构体类型 struct
枚举类型 enum
联合类型 union
指针类型
int* pi;
char* pc;
float* pf;
void* pv; //无具体类型的指针
空类型
void 表示空类型(无类型)
通常应用于函数的返回类型、函数的参数、指针类型。
二、整型在内存中的存储
2.1原码、反码、补码
计算机中的整数有三种二进制表示方法,即原码、反码、补码
三种表示方法均有符号位和数值位两部分,符号位都是用0表示正,用1表示负,而数值位正数的原码、反码、补码都相同。负数的三种表示方法各不相同。
原码:
直接将数值按照正负数的形式翻译成二进制就可以
反码:
将原来的符号位保持不变,其他位依次按位取反就可以得到反码
补码:
反码+1就得到补码
对于整型来说,为什么数据的补码存放在内存中?
因为使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理,(CPU只有加法器)
int main()
{
int a = 20;
//00000000000000000000000000010100 - 原码
//0x00000014 - 十六进制
int b = -10;
//10000000000000000000000000001010 - 原码
//11111111111111111111111111110101 - 反码
//11111111111111111111111111110110 - 补码
//0xfffffff6 - 十六进制
return 0;
}
我们发现在内存中存放的值是从后往前读的,这就与大小端字节序有关了
2.2大小端介绍
大端:数据的低位保存在内存的高地址中,而数据的高位保存在内存的低地址中;
小端:数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。
请设计一个小程序来判断当前机器的字节序:
//设计一个小程序来判断当前机器的字节序(大端、小端)
int check_sys()
{
int a = 1;
return *(char*)&a;
}
int main()
{
int ret = check_sys();
if (ret == 1)
printf("小端\n");
else
printf("大端\n");
return 0;
}
2.3练习
重要:
有符号的char的取值范围 -128~127 —— -2^7~2^7-1
无符号的char的取值范围 0~255 —— 0 ~ 2^8-1
有符号的short的取值范围 -2^15~2^15-1
无符号的short的取值范围 0 ~ 2^16-1