C语言中的位集类型使用哪种类型
|
我必须定义一个位集类型来构建位数组。
在这些数组之间,位操作和/或/或
被执行(例如比较),并且
主要操作。
我应该使用哪种类型作为位集类型?
我认为该类型应该是最宽的NOT SIMULATED类型
编译器可以处理。
即如果编译器模拟64位类型(如果计算机
或操作系统不支持,例如)掩蔽化合物
简单和32位类型之间的运算应为
代替。
如何确定呢?
还有更多问题:
新的c99标头定义了一些类型(精确宽度
整数类型),其中:
\“这些格式为intN_t和uintN_t。这两种类型都必须由N个位数精确地表示,没有填充位。intN_t必须编码为二进制补码有符号整数,而uintN_t必须编码为无符号整数。这些类型是可选的,除非该实现支持宽度为8、16、32或64的类型,然后它将类型定义为具有相应N的相应类型。其他任何N是可选的。
所以我认为检查64位类型的实现
是第一步,对吗?
我的项目使用SDL库,该库#定义了一个宏:
#ifdef SDL_HAS_64BIT_TYPE
typedef int64_t Sint64;
#ifndef SYMBIAN32_GCCE
typedef uint64_t Uint64;
#endif
#else
/* This is really just a hack to prevent the compiler from complaining */
typedef struct {
Uint32 hi;
Uint32 lo;
} Uint64, Sint64;
#endif
所以也许我可以对位集类型进行定义
取决于该宏(但这不是最佳选择,
因为我想写sdl indipendent的代码)。
告诉我您的意见。
没有找到相关结果
已邀请:
2 个回复
梦话快家腹
痰降锭骂奸
,但是对位集使用带符号类型是一个非常非常糟糕的主意,并且几乎肯定会导致未定义的行为)。虽然某些古老的16位计算机可能比系统字长大2磅,但我认为您很难找到任何存在此问题的现代计算机。另一方面,64位Windows具有32位
,因此您不会获得最佳类型,但为简单起见,您也可以使用它, 如果您拥有C99
,那么另一种方法是使用
。那几乎肯定是机器字的大小。 绝对在简单性上取胜的另一种方法是始终使用字节。 最后,请注意,在小端系统上,无论您使用什么类型的大小,内存中的表示形式都是相同的。