如何实现33位无符号整型数据类型

3

有没有办法在gcc编译器中实现33位无符号整数?目前,我正在使用无符号64位整数来存储33位值。但不幸的是,我希望该值在达到33位后被重置...


10
我不知道你为什么需要那个... - Armen Tsirunyan
4个回答

13
你可以使用位域,例如 (结果)。
#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;
}

1
数据类型的位域比intsigned intunsigned int更为特殊,是编译器特定的扩展功能,但GCC支持它,所以还是+1吧 :-) - Christoffer
2
@Christoffer: 这不是一个扩展功能。C++标准允许使用任何“整数或枚举类型”(§[class.bit]/3)作为位域类型。 - kennytm

2
struct int33
{
   unsigned long long x:33;
};

?


2

当值被推到33位边界之外时,它将溢出;如果在获取该值时使用33位掩码,您应该会得到所需的行为。


4
使用本地的64位数据类型,并且只在读取时使用其中的33位。 - Billy ONeal

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接