我想知道以下背后的科学。 32位值以64位类型左移32次,然后执行分割。某种程度上,精度被包含在最后的32位内,并且为了将该值作为浮点数检索,我可以在无符号的32位int的最大值上乘以1。位掩码和二进制算术
phase = ((uint64) 44100 << 32)/48000;
(phase & 0xffffffff) * (1.0f/4294967296.0f);// == 0.918749988
一样
(float)44100/48000;// == 0.918749988
确定它的'0xffffff'和不'0xffffffff'? – Wintermute
** - 1 **不是真正的代码。在Python中尝试你的第一个例子,表达式'(phase&0xffffff)*(1.0/4294967296.0)'产生'0.0007812499534338713'。 –
对于您在某处看到的实际示例,请注意,无符号32位int的最大值为2^32-1,非常接近您引入的2^32因子。所以结果(对于那个原始的例子)几乎是相同的。 –