У меня есть небольшой фрагмент кода, который требует чтения 4-битных значений, упакованных в 32-битное целое число.Поскольку мне нужно вызывать эту операцию несколько раз, даже если она проста, мне требуется максимальная скорость.Я размышлял о макросах и встроенных функциях, поэтому я сделал этот макрос:
#define UI32TO4(x, p) (x >> ((p - 1) *4) & 15)
И у меня есть встроенная функция, которая делает то же самое.
static inline Uint8 foo_getval(Uint32 bits, int pos){
return (bits >> ((pos-1)*4)) & 15;
}
Учитывая простотуоперации, и что значения уже подготовлены для этого вызова (поэтому нет возможности вызова неправильных типов или передачи значений, которые слишком велики или тому подобное), что было бы лучше всего использовать?Или, по крайней мере, наиболее приемлемым для кого-то, кто потенциально читает / изменяет код позже?
РЕДАКТИРОВАТЬ!Забыл упомянуть, я использую C99.