История изменений
Исправление gentoo_root, (текущая версия) :
short res = (1 << 10) | ((a & 31) << 5) | (b & 31);
Можно ещё заюзать union, struct и битовые поля:
union {
struct {
unsigned b : 5;
unsigned a : 5;
unsigned h : 1;
} in;
short out;
} u;
u.out = 0;
u.in.b = b;
u.in.a = a;
u.in.h = 1;
short res = u.out;
Возможно, второе не взлетит на big endian.
Исправление gentoo_root, :
short res = (1 << 10) | ((a & 31) << 5) | (b & 31);
Можно ещё заюзать union, struct и битовые поля:
union {
struct {
unsigned b : 5;
unsigned a : 5;
unsigned h : 1;
} in;
short out;
} u;
u.in.b = b;
u.in.a = a;
u.in.h = 1;
short res = u.out & ((1<<11) - 1);
Возможно, второе не взлетит на big endian.
Исправление gentoo_root, :
short res = (1 << 10) | ((a & 31) << 5) | (b & 31);
Примерно так, не проверял. Можно ещё заюзать union, struct и битовые поля:
union {
struct {
unsigned b : 5;
unsigned a : 5;
unsigned h : 1;
} in;
short out;
} u;
u.in.b = b;
u.in.a = a;
u.in.h = 1;
short res = u.out & ((1<<11) - 1);
Возможно, второе не взлетит на big endian.
Исправление gentoo_root, :
short res = (1 << 10) | ((a & 31) << 5) | (b & 31);
Примерно так, не проверял. Можно ещё заюзать union, struct и битовые поля:
union {
struct {
unsigned b : 5;
unsigned a : 5;
unsigned h : 1;
} in;
short out;
} u;
u.in.b = b;
u.in.a = a;
u.in.h = 1;
short res = u.out;
Это тоже не проверял. Возможно, не взлетит на big endian.
Исходная версия gentoo_root, :
short res = (1 << 10) | ((a & 31) << 5) | (b & 31);
Примерно так, не проверял. Можно ещё заюзать union, struct и битовые поля.