1 数据类型介绍
c语言的基本数据类型有
char //字符数据类型
short //短整型
int //整形
long //长整型
long long //更长的整形
float //单精度浮点型
double //双精度浮点型
注 : c语言没有string类型
数据类型的意义
数据类型的意义,就是申明数据在内存中的存储类型,以及如何去内存中读取数据。
1.1类型的基本归类
整形家族:
char
unsigned char
signed char
short
unsigned short
signed short
int
unsigned int
signed int
long
unsigned long
signed long
char
是否有signed类型取决于编辑器,C语言标准并未规定
浮点数家族
float
double
long double
构造类型(自定义类型)
数组类型
结构体类型
枚举类型
联合类型
指针类型
空类型
2 整形在数据中的存储
变量的创建实质上就是在内存中开辟空间,空间的大小由类型决定
2.1 原码 补码 反码
计算机中整数有三种二进制的表示方法,原码 补码 反码,三种表示方法都有符号位和数值位,符号位都是用0表示正,用1表示负。
正数的三种表示方法相同
负数的三种表示方法都不相同
原码
就是直接按照正负翻译成二进制
反码
将原码符号位不变,其他依次取反
补码
反码加一
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;
同时,加法和减法也可以统一处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
例子
1的
源码是00000000000000000000000000000001
反码是00000000000000000000000000000001
补码是00000000000000000000000000000001
-1的
源码是10000000000000000000000000000001
反码是1111111111111111111111111111111111110
补码是1111111111111111111111111111111111111
2.2 大小端介绍
大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中。
小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中。
大小端存储实际上是,因为数据是以字节为单位进行存储,两个字节以上的数据就需要考虑存储的顺序了,按理来说数据存储可以任何顺序来存储,只需要编译器按照它自己的顺序取出即可,只是这两种比较方便所以,采用大小端存储。
设计一个小程序,判断大小端存储
#include <stdio.h>
int check_sys()
{
int a = 1;
char* p = (char*)&a;//int*
if (*p == 1)
return 1;
else
return 0;
}
int check_sys()
{
int a = 1;
return *(char*)&a;
}
int main()
{
if (1 == check_sys())
{
printf("小端\n");
}
else
{
printf("大端\n");
}
return 0;
}
浮点型在内存中存储
3.1 一个例子
3.2 浮点数存储规则
根据国际标准IEEE(电器和电子协会),任意一个二进制浮点数可以表示成下面的形式。
- (-1)^S * M * 2^E
- (-1)^S表示符号位,当S=0,为正数;当S=1,V为负数。
- M表示有效数字,大于等于1,小于2。
- 2^E表示指数位。
IEEE 754 规定