使用typedef定义的int数组的位大小

时间:2012-03-16 08:13:34

标签: c

typedef unsigned int Set[10];
Set set1;

我认为这会创建一个名为set1的Set类型的变量,其中包含320位存储空间吗?

2 个答案:

答案 0 :(得分:6)

没有。这将创建一个名为Set的{​​{1}}类型的变量,其至少 10个set1所需的C堆栈上的顺序存储量。

这是多少位?这取决于平台和编译器。您可以通过编写以下内容来打印特定设置中的位数:

unsigned int

答案 1 :(得分:5)

分配的位数(和字节 1 )可能会有所不同。但是,保证为10个整数创建一个sequentiell存储,可以通过set1引用。


标准说什么?

该标准不会强制字节包含N ,因为这会使编写没有平台的编译器变得更加困难字节中的N

  

[open-std.org - n1147.pdf,3.6 / 3]

     
      
  • 一个字节由一个连续的位序列组成,   其数量是实现定义的。最不重要的一点   被称为低阶位;最重要的一点叫做   高阶位。
  •   

如何获得T型中的位数?

定义了一个常量(CHAR_BIT),用于保存< climits >中 char 中的位数。

由于所有类型都由 N 字节组成,并且 char 在执行sizeof(char)时保证产生1,我们可以使用此约束来计算任何位任意类型。

#include <climits>

template<typename T>
struct sizeof_in_bits {
  enum {
    value = sizeof(T) * CHAR_BIT
  };
};

std::cerr << "output: " << sizeof_in_bits<unsigned int[10]>::value;

  

输出:320

如上所述,上述输出是实现定义的


1 该标准不强制int的大小为M个字节。所有明确的状态是int能够通过-32767(如果已签名)和32767来保持至少 0 65535(如果未签名)。