按位运算对浮点有用

Tho*_*mas 4 floating-point x86 assembly bit-manipulation bitwise-operators

我注意到浮点数存在一个SSE指令让我感到疑惑.您可以使用fp/integer union中的标量执行相同的操作.

这个想法让我感到震惊的是,如果你对浮点数组的组成部分进行按位运算,你可以通过查看结果的符号位来确定它们中的任何一个是否为负数.

浮点值的按位运算还有什么其他用途?

phu*_*clv 6

很多.例如,当你只需要对像AVX这样的浮点指令集进行按位运算时,那些就变得非常方便了.

另一个应用:制作常量.您可以在Agner Fog的x86平台优化指南中的表13.10和13.11中看到很多示例.一些例子:

pcmpeqd xmm0, xmm0
psrld   xmm0, 30   ; 3 (32-bit)

pcmpeqd xmm0, xmm0 ; -1

pcmpeqw xmm0, xmm0 ; 1.5f
pslld   xmm0, 24
psrld   xmm0, 2

pcmpeqw xmm0, xmm0 ; -2.0f
pslld   xmm0, 30
Run Code Online (Sandbox Code Playgroud)

您还可以使用它来检查浮点值是否为2的幂.

其他一些应用程序,如Harold说:取绝对值和减去绝对值,复制符号,复用......我将在单个数据中演示以便于理解

// Absolute:
abs = x & ~(1U << 31);
// Muxing
v = (x & mask) | (y & ~mask); // v = mask ? x : y; with mask = 0 or -1
// Copy sign
y = (y & ~(1U << 31)) | (x & (1U << 31));
Run Code Online (Sandbox Code Playgroud)