как добавить 896 используя побитовую операцию? - PullRequest
0 голосов
/ 13 ноября 2018

Вопрос: как выразить b = a + 896 ... (1) и a = b - 896 ... (2) с побитовой операцией вместо сложения / вычитания?


Мотивация (не связанная с этим вопросом):

Кпреобразовать между IEEE754 32-битным и 64-битным показателем степени с плавающей запятой, мне нужно сложить / вычесть 896 из-за уравнений:

127 + exponent_value = fp32_biased_exponent  // bit 30-23
1023 + exponent_value = fp64_biased_exponent // bit 62-52

Следовательно b = a + 896 ... (1) и a = b - 896 ... (2).

В программе это выглядит так

uint64_t b = ((uint64_t)f32.biased_exponent + 896) & 0x7ff;
uint64_t a = (uint32_t)(((uint64_t)fp64.biased_exponent - 896) & 0xff;
...