问题:如何通过按位运算而不是加/减来表达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;