我要感谢一个很好的教程,该教程为Java新手解释了Java中所有“移位”如何工作。
我总是偶然发现它,但从未理解它是如何工作的。它应该解释Java中字节移位/位操作可能实现的所有操作和概念。
这只是我意思的一个示例(但我正在寻找一个讲解每种可能操作的教程):
byte b = (byte)(l >> (8 - i << 3));
好吧,官方Java教程“ 按位和位移位运算符”介绍了Java中可用的实际操作以及如何调用它们。
如果您想知道“我该如何使用位移”,那不是Java特定的,并且由于它是一种低级技术,因此我不知道任何“可以做的很酷的事情”本身。值得熟悉这些定义,并让您对使用该代码的其他代码睁大眼睛,看看它们做了什么。
请注意,通常以位纠缠为代价会提高效率,但会降低清晰度。例如,a << 1通常与相同,a * 2但说不清楚。重复异或可以交换两个数字,而无需使用一个临时变量,但它通常被认为是更好的形式更清楚地写的代码 与 临时变量(或者甚至更好,在一个实用方法)。因此在这方面很难给出很好的例子,因为您不可能在体系结构级别上取得任何新的或深刻的成就。这都是关于底层细节的。(而且我估计“野外”大量使用比特纠错是过早优化的实例。)
a << 1
a * 2