Вопрос: как выразить 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;