浮点数(图形)的按位运算?

时间:2010-02-05 21:16:04

标签: math floating-point integer bit-manipulation

  

可能重复:
  how to perform bitwise operation on floating point numbers

大家好!

背景:
我知道可以在图形上应用按位运算(例如XOR)。我也知道,在图形程序中,图形数据通常存储在浮点数据类型中(例如,能够将数据“乘以”1.05)。因此必须能够对浮点数据执行按位运算,对吗?

我需要能够对浮点数据执行按位运算。我想要将数据转换为long,按位操纵它,然后强制转换为float。

我认为,存在一种实现这一目标的数学方法,它更优雅(?)和/或更快(?)。

我看到了一些答案,但他们无能为力,包括this one

修改
另一个问题涉及无效指针转换,它依赖于更深层次的数据表示。所以这不是一个“完全重复”。

2 个答案:

答案 0 :(得分:5)

当“图形数据”点击屏幕时,它们都不是浮点数。按位操作实际上是在位串上完成的。由于对二进制的编码方案一致,因此按位运算仅对数字有意义。除了提取指数或尾数之外,试图对浮点数进行任何类型的逻辑按位运算都是通往地狱的道路。

基本上,你可能不想这样做。为什么你认为你呢?

答案 1 :(得分:0)

浮点数只是内存中二进制文件的另一种表示形式,因此您可以:

  • 测量数据类型的大小(例如32位),例如的sizeof(像素)
  • 获取指向它的指针 - 选择一个相同大小的整数类型,例如: UINT * ptr =& pixel
  • 使用指针的值,例如newpixel =(* PTR)^(* PTR)

这应该至少与非负值一起使用,并且应该没有可观的计算开销,至少在像C ++这样的非托管上下文中。也许你在做手术时必须掩盖一些比特,并且 - 根据类型 - 你可能需要单独处理指数和基数。