【问题标题】:c data type sizec 数据类型大小
【发布时间】:2011-03-14 14:54:48
【问题描述】:

我如何知道我的计算机中所有数据类型的大小?

【问题讨论】:

  • 说什么?可能想稍微改一下这个问题。这些数据类型在哪里?将在其中使用它的代码示例?通常,sizeof X 应该返回类型 X 的大小。
  • @Mechko:该语法适用于变量X。如果X 是一个类型,你应该使用sizeof(X)

标签: c types size


【解决方案1】:

下面的程序应该可以解决原始类型的问题:

#include <stdio.h>
int main()
{
    printf("sizeof(char) = %d\n", sizeof(char));
    printf("sizeof(short) = %d\n", sizeof(short));
    printf("sizeof(int) = %d\n", sizeof(int));
    printf("sizeof(long) = %d\n", sizeof(long));
    printf("sizeof(long long) = %d\n", sizeof(long long));
    printf("sizeof(float) = %d\n", sizeof(float));
    printf("sizeof(double) = %d\n", sizeof(double));
    printf("sizeof(long double) = %d\n", sizeof(long double));
    return 0;
}

这将打印类型使用的“字节”数,根据定义使用sizeof(char) == 1。 1 的含义(即多少位)是特定于实现的,并且可能取决于底层硬件。例如,有些机器有 7 位字节,有些机器有 10 或 12 位字节。

【讨论】:

  • 我试试这个,但是得到的 int 大小和 long long int 一样,为什么?
  • @JuanPablo - 因为它们在您运行此代码的任何机器上都是相同的大小。
  • 我有很多大小相同的类型,但这并不是重点。这些类型不仅仅取决于它们的大小。在我的机器上,程序告诉我以下内容: sizeof(char) = 1 sizeof(short) = 2 sizeof(int) = 4 sizeof(long) = 8 sizeof(long long) = 8 sizeof(float) = 4 sizeof(double ) = 8 sizeof(long double) = 16
  • C 不允许 7 位字节。 CHAR_BIT 要求至少为 8。POSIX 要求 CHAR_BIT 恰好为 8。
  • 顺便说一句,而不是&lt;code&gt;&lt;br&gt; 标签和&amp;gt; 实体,下次您只需键入代码,选择它并按 ctrl-k 格式化它(或单击文本区域上方的编辑工具栏上的代码图标(带有 1 和 0)。基本上,如果代码块用一个空行填充并缩进4个空格,它就会出现格式化。
【解决方案2】:

使用sizeof 获取变量类型的大小(以字节为单位)。
例如:
#include &lt;stdint.h&gt;
sizeof(int32_t) 将返回 4
sizeof(char) 将返回 1
int64_t a;
sizeof a; 将返回 8

http://publications.gbdirect.co.uk/c_book/chapter5/sizeof_and_malloc.html

【讨论】:

  • 正确的类型是 int32_tint64_t 而不是 int32int64。 -1 用于在示例中使用一些奇怪的系统特定类型而不是标准类型。
  • 你是对的。我的粗心错误。修复了这个问题并添加了适当的#include
【解决方案3】:

sizeof(T) 会给你传递给它的任何类型的大小。如果您试图找出在特定程序中使用或定义的所有数据类型的大小,您将无法做到——C 在编译时不会维护该级别的信息。

【讨论】:

    【解决方案4】:

    您可以将sizeof 应用于您需要知道其大小的每种类型,然后您可以打印结果。

    【讨论】:

    • @JuanPablo:你的意思是 8 4 4 8,对吧? intlong 可能具有相同的大小。没有规定说long 必须能够表示比int 更大的值范围,只是它必须能够表示至少int 可以表示的范围。跨度>
    • @James - 为了正确起见,它说 shortint 必须至少为 2 个字节,long 必须至少为 4 个字节,并且 short int long
    • @James McNellis:这不是真的,在 C99 5.2.4.2.1 中,int 的最小允许最大值为 32767,但 long 允许的最小最大值为 2147483647。int 是允许的与long 一样大,但这并不意味着long 可以与int 一样小。
    • @dreamlax:对不起,我不是很清楚,是吗?我只是说intlong 的大小可能相同(在这种情况下,int 的大小至少需要为 32 位)。
    • @JuanPablo:取决于平台,int 可能与longshort 的大小相同。 int 必须至少 16 字节宽(它必须能够表示至少 [-32767,32767] 范围),但可能(并且通常)更宽。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    • 2015-08-26
    • 1970-01-01
    相关资源
    最近更新 更多