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