你是否曾经在真实项目中使用过位移操作?

83

你是否曾经在实际编程项目中使用过 位移操作?大多数(如果不是全部)高级语言都有这种操作符,但是什么情况下才需要使用它们呢?

42个回答

0
我曾在一个网站项目中使用位移操作。这是一个电子商务应用程序,每个产品都有一些可配置的属性。用户可以选择所需的属性,UI会更新以提供所选选项的定价和SKU。
与其在数据存储中搜索与用户选项匹配的SKU,每个选项组合对应于一个特定的哈希值,实际上是使用位运算创建的数字。我为每个选项允许4位(16个组合),最多五个选项,因此总共20位。要从用户的选项计算哈希值,我会循环遍历每个编号属性并添加到哈希值中:
for(var i = 0; i < getSku.arguments.length; i++)
{
    index = getAttributeIndex(i, getSku.arguments[i]);
    hash += (index+1) << (4*i);
}

这比每次循环可能有数百个 SKU 并比较每次最多 5 个值要快得多。


0

是的,一直都有。比如这些用于将三维坐标打包/解包为32位整数的宏:

#define Top_Code(a, b, c)           ((((a) + x) << 20) | (((b) + y) << 10) | ((c) + z))                           
#define From_Top_Code(a, b, c, f)   (a = (((f) >>> 20) - x), b = ((((f) & 0xffc00) >>> 10) - y), c = (((f) & 0x3ff) - z))        

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接