你好,游客 登录 注册 搜索
背景:
阅读新闻

编码 : C语言的基本数据类型

[日期:2016-06-23] 来源:图灵社区  作者: [字体: ]

C 语言非常适合于编写系统程序,它的基本数据类型,如 int,其取值范围并不是固定的,而是与计算机硬件的体系结构、操作系统以及编译器等相关的。这样,让我们编写一个 C 语言程序来探查一下吧,下面就是 sizeof.c:

#include <stdio.h>
#include <float.h>

#define PR(x) printf("%11s: %2lu bytes\n", #x, (unsigned long)sizeof(x))

int main(void)
{
  PR(size_t);
  PR(void *);
  PR(char);
  PR(short);
  PR(int);
  PR(long);
  PR(long long);
  PR(float);
  PR(double);
  PR(long double);
  printf("\n---- DIG -------EPSILON -----------MIN -----------MAX\n");
  printf(" FLT %3d %-14E %-14E %-14E\n", FLT_DIG, FLT_EPSILON, FLT_MIN, FLT_MAX);
  printf(" DBL %3d %-14E %-14E %-14E\n", DBL_DIG, DBL_EPSILON, DBL_MIN, DBL_MAX);
  printf("LDBL %3d %-14LE %-14LE %-14LE\n", LDBL_DIG, LDBL_EPSILON, LDBL_MIN, LDBL_MAX);
  printf("---- --- -------------- -------------- --------------\n");
  return 0;
}

这个程序在 ideone.com 中的运行结果如下所示:

     size_t:  4 bytes
     void *:  4 bytes
       char:  1 bytes
      short:  2 bytes
        int:  4 bytes
       long:  4 bytes
  long long:  8 bytes
      float:  4 bytes
     double:  8 bytes
long double: 12 bytes

---- DIG -------EPSILON -----------MIN -----------MAX
 FLT   6 1.192093E-07   1.175494E-38   3.402823E+38  
 DBL  15 2.220446E-16   2.225074E-308  1.797693E+308 
LDBL  18 1.084202E-19   3.362103E-4932 1.189731E+4932
---- --- -------------- -------------- --------------

在我的 Lenovo PC 机的 Arch Linux 64 bit 操作系统环境下,使用 gcc 编译器和 clang 编译器,其运行结果如下所示:

$ sizeof
     size_t:  8 bytes
     void *:  8 bytes
       char:  1 bytes
      short:  2 bytes
        int:  4 bytes
       long:  8 bytes
  long long:  8 bytes
      float:  4 bytes
     double:  8 bytes
long double: 16 bytes

---- DIG -------EPSILON -----------MIN -----------MAX
 FLT   6 1.192093E-07   1.175494E-38   3.402823E+38  
 DBL  15 2.220446E-16   2.225074E-308  1.797693E+308 
LDBL  18 1.084202E-19   3.362103E-4932 1.189731E+4932
---- --- -------------- -------------- --------------

上述结果中,long double 是 16 bytes 的,但是实际上其范围和精度是和 12 bytes 的是一样的,可能是在 64-bit 操作系统中为了对齐字节边界的考虑吧。





收藏 推荐 打印 | 录入:elainebo | 阅读:
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款