我有必须为 16 位长的变量。我应该如何在平台上将其定义为完全 16 位?
我可以将其定义为short
,但取决于平台,它可以是 16 位或更多。
假设您使用的是 C99,然后使用uint16_t
(或int16_t
)来自<stdint.h>
. 只要编译器具有可用的底层 16 位类型,它们就保证存在。
用于int16_t
有符号整数或uint16_t
无符号,标头inttypes.h
和stdint.h
在 C99 中引入。如果您使用的是 C89,请定义您自己的类型。
请注意,根据 C11(ISO/IEC 9899:201x) §7.20整数类型,它们可能不会在某些实现中提供
对于此处描述的实现提供的每种类型)应声明 typedef 名称并定义关联的宏。相反,对于此处描述的实现未提供的每种类型,不应声明该 typedef 名称,也不应定义关联的宏。实现应提供那些描述为“必需”的类型,但不需要提供任何其他类型(描述为“可选”)。
如果<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;
}
如果您想要一个可移植的无符号 16 位整数,请使用uint16_t
和 对于有符号 16 位整数,请使用int16_t
.
inttypes.h
并且stdint.h
都在C99
. 如果您使用C89
,则必须定义自己的类型。