有没有办法在C中指定int大小?

时间:2015-10-11 23:12:25

标签: c types

我正在尝试检查有关2的补码加法,减法等溢出的一些功课答案,我想知道我是否可以指定数据类型的大小。例如,如果我想看看当我尝试将-128或-256分配给7位无符号整数时会发生什么。

4 个答案:

答案 0 :(得分:3)

在进一步阅读时,我发现你想要的是不正常的位大小,比如7位和9位等。 您可以使用位域

来实现此目的
struct bits9
{
    int x : 9;
};

现在您可以使用此类型bits9,其中只有一个字段x,其大小仅为9位。

struct bits9    myValue;

myValue.x = 123;

答案 1 :(得分:1)

对于任意大小的值,您可以在结构中使用bitfields。例如,对于7位值:

struct something {
   unsigned char field:7;
   unsigned char padding:1;
};
struct something value;
value.field = -128;

答案 2 :(得分:0)

您拥有的最小尺寸是char,它是一个8位整数。您可以使用未签名和签名的字符。看一下stdint.h标题。它以独立于平台的方式为您定义int类型。也没有7位整数这样的东西。

答案 3 :(得分:0)

使用内置类型,您可以使用以下内容:

 char      value1;      // 8 bits
 short     value2;      // 16 bits
 long      value3;      // 32 bits
 long long value4;      // 64 bits

请注意,Windows上的Microsoft编译器就是这种情况。 C标准没有规定除#34之外的确切宽度;这个宽度必须至少与另一个一样大#34;等等 如果您只关心特定平台,则可以打印出类型的大小,并在您弄清楚它们之后使用它们。

或者,您可以使用C99标准中的stdint.h。它具有名称中宽度的类型以使其清晰

int8_t    value1;    // 8 bits
int16_t   value2;    // 16 bits
int32_t   value3;    // 32 bits
int64_t   value4;    // 64 bits