INT类型是4个字节吗?
多数同学可能会有如下几种回答:
1) INT类型是4个字节
2) 不同位宽的操作系统下INT大小不同, 如64位系统下INT为8个字节
3) 不同字长的CPU芯片下会有不同的INT大小.(CPU的“字长”是指其一条指令/一次运算可以处理的数据的最大宽度)
其实以上答案都是错误的, 或者说都是片面的.
C语言中只有4中基本数据类型——整型、浮点型、指针和聚合类型(如数组和结构等);所有其他类型都是从这4种基本类型的某种变化或组合派生而来。C语言仅提供了类型及关键字, 并未给出每个类型的大小. 而决定类型大小的不是C语言, 而是编译器.
编译器决定数据类型的大小, 而其有着一定的规则:
INT类型有一个称呼叫做最适系统长度, 在一些没有操作系统的嵌入式计算机系统上,int的长度与处理器字长一致;有操作系统时,操作系统的字长与处理器的字长不一定一致,此时编译器根据操作系统的字长来定义int字长:比如你在64位机器上运行win32系统,那么所有for win32的C/C++编译器中int都是32位的.
企业中的实际项目, 往往并非以int, short等直接定义变量。
通常会有如下形式的定义:
#define unsigned short UINT16 //16位无符号整数
#define unsigned int UINT32 //32位无符号整数
UINT16 a = 0;
UINT32 b = 0;
刚进入项目的同学会有这样的疑惑, 为何要为变量再起一个名字。
其实这样定义的数据结构非常具有通用性,如果上述32平台上的数据发送到16位平台上接收,在16位平台上仅仅需要修改UINT16、UINT32的定义。
多数同学可能会有如下几种回答:
1) INT类型是4个字节
2) 不同位宽的操作系统下INT大小不同, 如64位系统下INT为8个字节
3) 不同字长的CPU芯片下会有不同的INT大小.(CPU的“字长”是指其一条指令/一次运算可以处理的数据的最大宽度)
其实以上答案都是错误的, 或者说都是片面的.
C语言中只有4中基本数据类型——整型、浮点型、指针和聚合类型(如数组和结构等);所有其他类型都是从这4种基本类型的某种变化或组合派生而来。C语言仅提供了类型及关键字, 并未给出每个类型的大小. 而决定类型大小的不是C语言, 而是编译器.
编译器决定数据类型的大小, 而其有着一定的规则:
INT类型有一个称呼叫做最适系统长度, 在一些没有操作系统的嵌入式计算机系统上,int的长度与处理器字长一致;有操作系统时,操作系统的字长与处理器的字长不一定一致,此时编译器根据操作系统的字长来定义int字长:比如你在64位机器上运行win32系统,那么所有for win32的C/C++编译器中int都是32位的.
企业中的实际项目, 往往并非以int, short等直接定义变量。
通常会有如下形式的定义:
#define unsigned short UINT16 //16位无符号整数
#define unsigned int UINT32 //32位无符号整数
UINT16 a = 0;
UINT32 b = 0;
刚进入项目的同学会有这样的疑惑, 为何要为变量再起一个名字。
其实这样定义的数据结构非常具有通用性,如果上述32平台上的数据发送到16位平台上接收,在16位平台上仅仅需要修改UINT16、UINT32的定义。