有没有办法在gcc编译器中实现33位无符号整数?目前,我正在使用无符号64位整数来存储33位值。但不幸的是,我希望该值在达到33位后被重置...
#include <stdint.h>
#include <cstdio>
struct uint33_t {
uint64_t value : 33;
};
int main() {
uint33_t x = {0x1FFFFFFFFull};
printf("%llx\n", x.value);
x.value += 1;
printf("%llx\n", x.value);
return 0;
}
int
、signed int
和unsigned int
更为特殊,是编译器特定的扩展功能,但GCC支持它,所以还是+1吧 :-) - Christofferstruct int33
{
unsigned long long x:33;
};
?
当值被推到33位边界之外时,它将溢出;如果在获取该值时使用33位掩码,您应该会得到所需的行为。