C或C实现当然可以提供类似大小的类型,但是大多数实现都不会遇到它们,并且(2)大多数处理器不支持对这些类型的直接操作 .
如果您尝试将这些整数用作二进制标志组,请考虑使用 std::bitset 作为其他答案的建议 . 这甚至可能是更好的选择,因为它明确表明您正在使用一组标志 . 例如:
std::bitset<6> bits; // Six independent bit flags
bits[3] = true; // Set the third flag
如果您尝试将它们用作实际的整数类型,仅受它们使用的位数限制,请考虑使用位域,如下所示:
struct uint6_t {
uint64_t value : 6; // 6 bits, unsigned
};
struct int6_t {
int64_t value : 6; // 6 bits, signed
};
然后,您可以将 uint6_t 的 value 字段用作六位整数 . 这仅适用于小于在位域内使用的基础类型大小的大小,这应适用于6或11等大小,但不适用于137或271等大小 . 一个注意事项 - 这些对象的实际大小将由于编译器引入的填充位,可能不是6位,但它们的功能仍然是6位整数 .
显然C模板允许你做这样的事情:
template struct uint {
uint64_t data : NumBits;
};
template struct Int {
int64_t data : NumBits;
};
uint<6> value;
value.data = 0; // Or other uses
Int<6> value;
value.data = -1; // Or other uses
EDIT :根据你're trying to do, it seems like you'寻找类似的东西:
uint<6> value;
value.data = -3;
std::cout << value.data << std::endl; // Prints 3