【数据类型】基本数据类型
F 16进制数,一个16进制数只能表示 0~F
FF 一个字节,两个就可以表示0~255或-127~126了
char 具体是表示0~255还是-127~126,在不同平台解释不同,所以最好显式使用 signed char
微软平台下,short占16位,int和long占32位,64位整形在VC6里是__int64;VS里提供了typedef __int64 LONGLONG
——C标准类型,没有规定数位,随着机器的发展可能会改变。
轻易不要使用unsigned int 类型做函数参数,调用者未注意传入负数会自动转为大整数,不易察觉。
fun(int i) { if(0<i<20) throw new exception; } fun(unsigned int i) { if(0<i<20) throw new exception; }
C++对象的大小,使用char的大小的整数倍来表示的。不同平台对此不要做过多假设,STL提供了专门研究类型大小、边界的库。
WORD,来自微软windef.h,宏 typedef unsigned short WORD; 微软保证位数不随机器改变,到时改变宏(好思路)。
DWORD,同上,保证位数 typedef unsigned long DWORD;
BYTE, 同上,保证位数 typedef unsigned char BYTE;
保证位数的无符号整数,用来进行位操作,以及作为固定位参数MAKEWORD(1,2)
bool
布尔值,true, false,不要用0, 1,占一个字节。
在VC4时,bool被 typedef成了int,一个只有两种状态的类型居然占了32位内存。在VC5.0后,bool被定义成了一个字节即8位,为了字节对齐。数个bool对象列在一起,还可能会各占一个bit,这取决于编译器的优化。
BOOL
微软宏 typedef int BOOL,为了兼容VC4的bool而诞生了32位的BOOL。
0, 非0,只用FALSE和TRUE,尽量不要FALSE==BOOL,而用FALSE!=BOOL或TRUE==BOOL
总结,F FF(255) 00 00 00 AF(int)
signed char
位操作需要固定位用WORD
不需要固定位用bool,占位少