
3.4.2 如何在C语言代码中采用大小不同的数据块来表示整数
整数可以用各种尺寸的数据块来表示。最小的数据块是单字节的数据块,这种数据块在C语言里面叫作char。之所以这样称呼是有历史原因的。在Unicode标准还没有出现之前,C语言采用一个字节(byte)来表示英语文本里面出现的各种字符(character),例如大写字母、小写字母、数字、标点以及某些特殊字符,由于这些字符不超过256种,因此只需要用一个字节就能表示出来。有些编程语言会把这种由单个字节所构成的整数类型直接称作byte,可惜C语言没有采用这个称呼。
C99标准添加了许多整数类型,这些类型都能保证计算机至少会用相应个数的二进制位来实现这样的整数。其中最基本的一组类型是int<n>_t或uint<n>_t形式的类型,<n>可以取8、16、32或64。这些类型都明确规定了实现这种类型的值时所使用的二进制位个数,于是,我们就可以更加放心地把采用这种类型所写的程序从一台计算机移植到另一台计算机上,而不用担心它的宽度(也就是它所包含的二进制位个数)会随着计算机的CPU与操作系统而发生变化。除了下面这张表格所列出的相关类型之外,还有一些整数类型也属于这种便于移植的类型。

注意:
□如果你明确指出某类型是signed,那么这种类型的值既可以是正数,也可以是负数,如果你明确指出某类型是unsigned,那么这种类型的值只能是(0或)正数。如果你没有明确指出某类型是signed还是unsigned,那么C语言可能默认它是signed。
□short类型至少会用2个字节来实现,而某些计算机可能会采用更多的字节来实现这种类型。
□int、unsigned、long与unsigned long至少会用4个字节来实现,而某些计算机可能会采用更多的字节来实现这几种值。
□long long与unsigned long long至少会用8个字节来实现,而某些计算机可能会采用更多的字节来实现这两种值。
大家不要让这么多种变化形式给吓到。对于大多数情况来说,我们还是可以先从最简单的int写起,等确实需要把程序移植到各种计算机上时,再考虑改用更便于移植的类型。
int类型可以用来表示整数,但它所表示出的这些整数只占所有数值中的一小部分,因为在整数与整数之间还有很多小数需要表示。