как реализовать беззнаковый 33-битный целочисленный тип - PullRequest
2 голосов
/ 12 октября 2010

Есть ли способ реализовать 33-битное целое число без знака для компилятора gcc? На данный момент я использую 64-разрядное целое число без знака для хранения 33-разрядного значения. Но, к сожалению, я хочу, чтобы значение было сброшено после того, как оно достигнет полных 33 бит ...

Ответы [ 4 ]

13 голосов
/ 12 октября 2010

Вы можете использовать битовое поле, например ( результат )

#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;
}
2 голосов
/ 12 октября 2010

Значение будет переполнено при выходе за пределы 33-битной границы; если при получении значения вы используете 33-битную маску, вы должны получить желаемое поведение.

2 голосов
/ 12 октября 2010
struct int33
{
   unsigned long long x:33;
};

0 голосов
/ 12 октября 2010

Я написал некоторый код, связанный с этим:

http://bitbucket.org/pnathan/logic-vector

Вы можете просмотреть его.Если вы измените / улучшите его, пожалуйста, исправьте.:)

...