基本数据类型字节数

最近接触了C发现真是强大,然而实在是难学,就数据类型的字节数都那么多道道,我体会到《从入门到放弃》是什么感觉了……

References:

C语言标准并未明确说明各种类型的字节数,但是规定了最小的取值范围,实际长度和机器字长、编译器有关,如果需要具体平台的实际字节数,可通过sizeof获取。而且对于整形数据只规定了short占用的空间不能多于int,long占用的空间不能少于int。Java则保证了全平台一致性,与其追求的“一次编写,到处运行(Write once, run anywhere)”目标一致。下面大致将两种语言的基本类型的字节数作了下对比,由于C语言的平台较多,且不同平台间差异较大,这里只表示常见情况下的数据。

数据类型charbyteshortintlonglong longfloatdoublebooleanchar*
Java21248/481/
C1/22或44或88481(C99中的_Bool)2

由于各平台可能会出现些许的差异,如果想跨平台一致就可以用到<stdint.h>这么个神奇的东西,该头文件中定义了指定长度的整数类型或不少于制定长度的整数类型,使其通过定义此头文件中的类型即可保证各平台的基本一致,方便程序跨平台使用,其中部分内容如下:

typedef signed char        int8_t;
typedef short              int16_t;
typedef int                int32_t;
typedef long long          int64_t;
typedef unsigned char      uint8_t;
typedef unsigned short     uint16_t;
typedef unsigned int       uint32_t;
typedef unsigned long long uint64_t;

typedef signed char        int_least8_t;
typedef short              int_least16_t;
typedef int                int_least32_t;
typedef long long          int_least64_t;
typedef unsigned char      uint_least8_t;
typedef unsigned short     uint_least16_t;
typedef unsigned int       uint_least32_t;
typedef unsigned long long uint_least64_t;

typedef signed char        int_fast8_t;
typedef int                int_fast16_t;
typedef int                int_fast32_t;
typedef long long          int_fast64_t;
typedef unsigned char      uint_fast8_t;
typedef unsigned int       uint_fast16_t;
typedef unsigned int       uint_fast32_t;
typedef unsigned long long uint_fast64_t;

typedef long long          intmax_t;
typedef unsigned long long uintmax_t;

唉,真复杂……

标签: none

添加新评论

ali-01.gifali-58.gifali-09.gifali-23.gifali-04.gifali-46.gifali-57.gifali-22.gifali-38.gifali-13.gifali-10.gifali-34.gifali-06.gifali-37.gifali-42.gifali-35.gifali-12.gifali-30.gifali-16.gifali-54.gifali-55.gifali-59.gif

加载中……