0

我有必须为 16 位长的变量。我应该如何在平台上将其定义为完全 16 位?

我可以将其定义为short,但取决于平台,它可以是 16 位或更多。

4

4 回答 4

6

假设您使用的是 C99,然后使用uint16_t(或int16_t)来自<stdint.h>. 只要编译器具有可用的底层 16 位类型,它们就保证存在。

于 2013-07-17T12:27:32.753 回答
1

用于int16_t有符号整数或uint16_t无符号,标头inttypes.hstdint.h在 C99 中引入。如果您使用的是 C89,请定义您自己的类型。

请注意,根据 C11(ISO/IEC 9899:201x) §7.20整数类型,它们可能不会在某些实现中提供

对于此处描述的实现提供的每种类型)应声明 typedef 名称并定义关联的宏。相反,对于此处描述的实现未提供的每种类型,不应声明该 typedef 名称,也不应定义关联的宏。实现应提供那些描述为“必需”的类型,但不需要提供任何其他类型(描述为“可选”)。

于 2013-07-17T12:27:30.213 回答
0

如果<stdint.h>并且int16_t不可用,解决方法可能是位域。由于位域仅在结构或联合内部有效,因此必须将其包装成一个:

#include <stdio.h>

struct auw {
    int sixteen :16;
        };

int main(void)
{

struct auw one = {16*1024 }, two, result;

two = one; /* assigmment is easy*/

        /* but addition is a bit more painful */
result.sixteen = one.sixteen + two.sixteen -1;

printf("Result=%d\n", (int) result.sixteen );

return 0;
}
于 2013-07-17T12:37:05.103 回答
0

如果您想要一个可移植的无符号 16 位整数,请使用uint16_t和 对于有符号 16 位整数,请使用int16_t.

inttypes.h并且stdint.h都在C99. 如果您使用C89,则必须定义自己的类型。

于 2013-07-17T12:33:16.497 回答