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

83

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

42个回答

0

当与“低级”设备通信时,例如数字以太网-IO盒子或PLC时,位移也是必需的,这些设备通常将单个输入/输出值打包成字节。


0

0
我曾经(很多年前)为一个项目编写了一个输出例程,该例程使用Excel Oper结构创建Excel电子表格。这是一种二进制文件格式,需要大量的位操作。以下链接提供了Oper结构的示例Safari Books

0

我在C#中进行了一些位移操作。该应用程序需要对语音音频输入进行归一化处理,这需要在音频样本级别上进行多个数学运算。


0

是的。特别是在使用控制和状态字节作为硬件驱动程序的仿真器中。控制字节中的每个位都有特殊含义,状态字节中的每个位也都有特殊含义。


0

我已经使用它来实现UTF-8和UTF-32之间的转换。


0

大多数数据包仍然是位编码的。如果您使用任何类型的低级网络通信,您将不得不处理位。

此外,分析包含声音和视频的数据包--我相信甚至MP3标签也使用了一些位。

最重要的是,不熟悉位操作意味着您很可能会错过更好的实现某些操作的方法。我的意思是,如果您正在处理存在5十亿有序对象的情况,这就是能够轻松地将它们全部放入RAM以进行即时查找或每次在文件中查找之间的区别--对于这样的任务,我会说,如果一个自称软件工程师的人没有使用位操作来实现它,那么他的工作能力是不合格的。


0

当然。处理亲和掩码需要使用位移。

例如,您可能希望限制应用程序仅使用指定数量的处理器(以获取每个处理器的费用)- 您将使用位移来计算亲和掩码中的位数吗?


0

我曾经做过一些与新颖的加密结构有关的工作,将序列化结构(以及随后对它们的更新)隐藏在同态加法器后面。许多哈希也依赖于位操作;在它们之间进行移位。

涉及大量的位移和令人讨厌的大数操作;全部都是用Java实现的(诚然,这是一个参考/研究实现)。

还做了压缩项目(特别是GZIP实现),在这种情况下你需要频繁地打包位;无法想象没有 << 和 >>(或者如果你在Java中,则为 >>>)如何完成。

基本上,如果你正在处理加密或压缩,那么很有可能在某个时候需要位移。


0

不,我从来没有真正需要使用它们。我认为这些二进制操作在高级语言中有点过时了。就像有人说的那样,它总是可以用其他数学表达式模拟,而且由于这些表达式几乎不会被使用,它们可以内置在外部库中。在 Ruby 或 Python 中进行位移听起来对我来说非常奇怪,有点像混合高低级别。


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