字长是与具体的计算机平台相关的,如 8086 ~ 80286 16bits
i386 平台的 32bits,以及 x86-64 64bits 等等。
    因此,所谓“一个字(word)”在不同平台上代表不同的数据位数,
传统的微型计算机教科书是基于16位机的,因此 1word = 16bits
然而32位机上 1word = 32bits
x86-64 上的gcc,默认intfloat两种数据类型是32位的,并由此——
    short [int]    16bits
    int        32bits
    long [int]    64bits    (这比传统32位机的32long合理)
    float        32bits
    double        64bits
C/C++ 标准中,intfloat 这两种数据类型的存储位数被要求等于
所在平台的一个字,这主要是考虑到大多数平台处理自己相应字长的整数
或者浮点数效率最高,当然 x86-64 gccintfloat32位而非64位。
这里可以举两个例子:
    Intel Pentium Pro及其后的处理器中的浮点计算单元为64/80位,
因此其处理double型浮点数据的速度比float快。现代大部分32位编译器
都使用double型数据作为默认的内部浮点类型,(必要时可以强制提升为
80bits 或者 128bits,但是一般不可能强制内部使用单精度浮点数。)
单精度的 float型仅仅在输入输出时与内部 double类型转换得到。
    64位平台上(包括x86-64),整数单元64位,浮点单元128位,
因此大部分64位编译器不仅采用64位浮点,而且也用64位整型作为默认的
内部数据类型。不过,x86-64 平台上gcc 定义 intfloat32位,那么
也就是说内部数据类型默认为 longdouble printf输出格式 unsigned short。
(当然,为了尽可能的利用L1L2缓存,对于较大的浮点数组并不一定以
  double型为佳,而应该在可能的情况下使用float型以减小数组大小。)
================================================================
printf/scanf 及相关函数的 FORMAT 格式控制:
%d    int            %u    unsigned
%ld    long            %lu    unsigned long
%feg    float
%lflelg    double
%LfLeLg    long double (四倍精度浮点,通常为128bits
其中输出浮点数(printf)时始终只需要使用 %feg
    按照gcc约定,“l”修饰符指定数据宽度至少为64位。
================================================================
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
附录:
我自己编写的用于获取整数类型长度信息的小程序,编译时需要 -lm 参数。
x86-64 SuSE 上结果依次是 816326464
/*****************************************
  Test for the bits of types of datatype
*****************************************/
#include <stdio.h>
int main (void)
{
printf("\n\nThe char type \t=%3d bits", sizeof(char)*8 );
printf("\nThe short type \t=%3d bits", sizeof(short)*8 );
printf("\nThe int type \t=%3d bits", sizeof(int)*8 );
printf("\nThe long type \t=%3d bits", sizeof(long)*8 );
printf("\nlong long type \t=%3d bits", sizeof(long long)*8 );
printf("\nThe float type \t=%3d bits", sizeof(float)*8 );
printf("\nThe double type\t=%3d bits", sizeof(double)*8 );
printf("\nlong double type\t=%3d bits\n", sizeof(long double)*8 );
}