数据类型介绍:
在上述几种数据类型中,可分为两大类:
- 第一大类:整形数据,以下的数据类型都可分为整形数据,
因为char字符类型在进行存储的时候,存的是ASCII码值,是整形,所以可以将char类型归为整形类型。
- 第二大类:浮点数类型,在除了以下几种的浮点数类型,其实还存在:long double;等相似类型。
- 当然除了以上C语言内置类型,还存在自定义类型。
就是为自己构造类型,比如:
在其中数组类型是为 数据类型和元素个数组合起来,比如说:
int arr1[10]; //数组类型—> int [10];
int arr2[5]; //数组类型—> int [5];
char arr3[10]; //数组类型----> char[10];
其中arr1和arr2的数组类型是不一样的,如何分别其数组类型不同:就看其数据结构和元素个数,只要其中之一不同,其数组类型就不同。
- 指针类型,如:
其中有一种比较特殊的指针类型:
void* 其特殊之处:
- 可以接受任意类型的地址。
- 不能进行解引用操作。
- 不能进行+ - 整数的操作。
整形在内存中的存储
不是在说在内存中的储存么?这么扯到数据结构上去了;
要知道当我们在创造了一个变量:就会在内存中开辟一块空间进行存储,而开辟一块多大的空间就取决于你要存储的变量的类型了。
比如:
我要存int类型的数据,就需要4个字节的空间;而如果是char类型的数据,就只需要1个字节的空间了。
现在我们来看看整形数据在内存中的储存,如果到现在我们浅浅的了解了在内存中是储存方式,接下来是我们一定需要了解到的:原码,反码,补码。
首先我们知道计算机读取数据都是靠二进制,而整形数据的二进制有三种表达形式:原码、补码、反码。这三种表现方法均有符号位和数值位,符号位是其二进制最高的一位,用“1”(正)或“0”(负)来表示,而数值位就是真实有效的值。
正数的原、反、补码都相同。
负数的原、反、补码都各不相同:
原码:直接将数据按照正负形式翻译成二进制序列。
反码:将已经翻译成二进制序列的位按位取反,除符号位不变。
补码:再将反码+1。
对于整数来说:补码形式就是整形储存在内存中的形式。
简而言之:对于整形来说:数据存放在内存中其实存放的是补码。
可以在VS编译器上证明以下:
对于在其中看到的是以16进制显示:10的16进制是a;
所以可以看到整形在内存中储存是以补码形式:
当然可以知道正数的原,反,补码都相同,怎么看的出来?
那我们以 负的整数来看一下:
由此可以看出整形在内存中存储的是其补码;
- 但是还有一点是二进制在内存中存储的顺序,如果你对二进制比较熟悉可以看到上述中一补码:为
但是这与内存中存储的方式却不一样:倒着存的,为什么
因为存储顺序是按照字节序:是以字节为单位,讨论存储顺序;
可以分为两种顺序:大端字节序存储、小端字节序存储。
大端字节序存储:是指数据的低位保存在内存的高地址中,而数据的高位保存在内存的低地址中;
小端字节序存储:是指数据的高位保存在内存的高地址中,而数据的低位保存在内存的低地址中;
多加一点知识:
当然为什么要有大小端之分呢?
我们要知道,在计算机系统中,是以字节为单位,每个地址单元都对应这一个字节,一个字节有8个比特位,C语言中除了char类型是一个字节外,还有4个字节(32个比特位)的int类型,2个字节(16个比特位)的short类型,对于大于8位的处理器,因为大于1个字节,那么必然存在着如何将多个字节安排的问题,因此出现了大端,小端模式。