以通俗的方式理解位运算 (以位运算加法为例)
在十进制加法运算中,因为我们的加法满足 满十进一 的规则,所以这种运算方式将会导致 进位 [1] ,从而导致了这样的一种结果:
在十进制的 四则运算 [2] 里,每一位低位 [3] 都可能因为四则运算而影响到下一位高位 [4] 。
而在我们的位运算中,以下4种位运算方式都没有 进位 规则。
此外,还要提到两种特殊的位运算 进位 和 退位 ,看一下这两种情况下的运算结果:
当然还有 无限位数 下运算,参考如下:
看完这2种情况可能有人会说:这不是已经影响到了每一位上的数?甚至前后位还发生了“数据的丢失”!
确切的说:不管是有限位数下还是无限位数下,进位和退位的运算都影响到了其它位。但特别要强调的是:位运算是“对每一位进行独立运算”, 进位 和 退位 也是如此:
通过尝试,我们可以发现二进制的加法和十进制的加法其实都有着共通的地方,也就是“满n进位”,即:满2进1,满10进1。我们列几个式子计算一下就清楚了:
待进位 的二进制计算可以观察到如下图表般的规律:
结果位 的二进制运算则有如下规律:
规律有了,那么我们开始开始尝试使用位运算完成加法计算:
到步骤4时,问题来了。我们需要一些例子分析一下会有什么结果:
这里我们发现应该让1100和0001进行重复步骤的加算,因为1100和0001是2个全新的数,并没有让它们相加组合:
回头完善步骤:
至此,通过位运算完成加法计算已经说明完毕。我们可以发现位运算的作用真的就只是“在做标记”而已,是名副其实的“按位运算”。
至于减法涉及到了一些特别的技巧,乘法除法其实按本文理解了位运算的本质后也并不会很难用位运算去实现它,所以就不再提及了,读者可以自行尝试,或者搜索其它作者的相关文章。
本文所提及的口头术语的解释: