最近在看The C Programming language (以下简称The C)这本书,其中关于字节的定义让我想起了一则笑话。
深夜里,警察见一路人急匆而过。
警察大喊:站住,int类型占几个字节?
路人:4个字节。
路人:为什么问这样的问题?
警察:这个点出来的只有两种人,小偷和程序员。
这是娱乐化的黑段子,大笑过后不得感叹警察的睿智,这是全民编码的时代,连警察蜀黍都知道各个类型变量所占的字节。要是答不上岂不被请去喝茶,但是事实真的这么简单吗?
The C 中这样讲:Each complier is free to choose appropriate sizes for its own hardware, subject only to the restriction that shorts and ints are at least 16bits, longs are at least 32bits, and short is no longer than int, which is no longer than long. 意思是编译器可以根据自身硬件来选择合适大小,唯一的约束条件:short 和 int 型至少16位,long型至少32位,short 型不能长于int 型,int 型不能长于long型。换句话说,不同平台上对不同数据类型分配的字节数是不同的,具体的分配主要由编译器决定。常用数据类型对应字节数
C类型 | 32位编译器 | 64位编译器 |
char | 1 | 1 |
char*(指针变量) | 4 | 8 |
short int | 2 | 2 |
int | 4 | 4 |
unsigned int | 4 | 4 |
float | 4 | 4 |
double | 8 | 8 |
long | 4 | 8 |
long long | 8 | 8 |
unsigned long | 4 | 8 |