我最近被问到一个问题,"how do you multiply without using the multiplication operator, without any sort of looping statements or explicit addition"
并且意识到我根本不熟悉按位操作。
显然wikipedia但我需要更多针对新手的解释。还有这个hack guide,但我还没有掌握它。
我不介意你在书中指出一章,因为我可以通过Safari Books和其他资源访问一个好的图书馆。
答案 0 :(得分:3)
Knuth,第2卷 - 半数值算法
答案 1 :(得分:2)
这个问题的关键在于“半加法器”和“全加法器”。半加器添加两位输入以产生单位结果和一位进位。全加器添加三位输入(两个正常输入加一个来自低位的进位)以产生单位结果和单位进位。
在任何情况下,结果都基于添加的真值表。对于半加器,即:0 + 0 = 0,0 + 1 = 1,1 + 0 = 1,1 + 1 = 0 +进位。
因此,结果的“正常”部分是输入的XOR。结果的“进位”部分是输入的AND。完全加法器几乎是相同的,但留给了读者的臭名昭着的“练习”。
将这些放在一起,您使用半加器表示最低有效位,使用全加器表示其他位以添加N位输入。
一旦你可以做加法,有几种方法可以做乘法。乘以NxM的简单(和慢)方法是将N加到M次上。更快(但有点难以理解)的方式是转移和添加。例如,Nx5 = Nx4 + Nx1。你可以通过将N左移L位来产生NxB,其中B = 2 L 。