数据类型与存储
一、数据类型与存储
类型,是一组数值及对该组数值进行各种操作的集合。同一种类型的数据,在不同的处理器平台下,存储方式可能不一样。不同类型的数据,在同一个处理器平台下,存储方式和运算规则也可能不一样。很多人都说指针是C语言的灵魂,我认为存储才是C语言的精髓和灵魂。
认识一下ANSI C关键字 和 C99/C11新增关键字。关键字里,除了控制程序结构的一些关键字,绝大部分都与数据类型和存储相关。
1.1 大端模式与小端模式
在计算机中,位(bit)是最小的存储单位,通常使用一个电容器来表示:充电时高电位表示1,放电时低电位表示0。8个bit组成一字节(Byte),字节是计算机最基本的存储单位,也是最小的寻址单元,计算机通常以字节为单位进行寻址。字(Word)代表计算机处理指令或数据的二进制数位数,是计算机进行数据存储和数据处理的运算的单位。在一个32位的计算机系统中,通常4字节组成一个字(Word),字是软件开发者常用的存储单位。(注意:一个字并不都是占4字节,通常由系统硬件(总线,CPU命令字位数等)有关,在16位的系统中(比如8086微机) 1字 (word)= 2字节(byte)= 16(bit),在32位的系统中(比如win32) 1字(word)= 4字节(byte)=32(bit),在64位的系统中(比如win64)1字(word)= 8字节(byte)=64(bit))。
-
字节序
不同字节的数据在内存中的存储顺序被称为字节序。根据字节序的不同,我们一般将存储模式分为大端模式和小端模式。- 大端模式:高地址存储高字节数据,低地址存储低字节数据。
- 小端模式:高地址存储低字节数据,低地址存储高字节数据。
常用的处理器中,ARM、X86、DSP一般都采用小端模式,而IBM、Sun、PowerPC架构的处理器一般都采用大端模式。
如何判断程序运行的当前平台是大端模式还是小端模式呢?很简单,我们只需要将一个整型变量赋值给字符型变量,通常会发生"截断",将会给低8位的字节赋值到字符型变量,通过打印就可以判断是大端模式还是小端模式。
#include <stdio.h> int main(void) { int a = 0x11223344; char b; b = a; if(b==0x44) printf("Little endian\r\n"); else printf("Big endian\r\n"