假设我有以下内容:
var n = 3;
我想要 2^n 次幂。
所以我可以这样做:
Math.pow(2,n)
这等于 8,亲爱的。
或者我可以这样做:
1 << n
这也等于 8,亲爱的。
我正在尝试描绘位的移动。
所以我认为 n's,在这个例子中等于 3,二进制表示法是:
11
即 (1 * 2^1) + (1 * 2^0) = 3
然后我执行操作 1 << n
位左移一个,我认为 1 << n
的输出,用二进制表示法,是这样的:
110
位向左移动一个位置,用零替换第一个位,但这等于 6 而不是 8:
即 (1 * 2^2) + (1 * 2^1) + (0 * 2^0) = 6
不太好,在向左移位后我正在计算 1 << n
根据我的二进制符号 1 << n
等于 6确实等于 8,所以我对左位移位操作的二进制表示法不正确
要么我错误地起草了 3 的二进制符号和/或我没有正确地向左移动二进制符号中的位以输出 1 << n
。
谁能解释一下我的思维过程哪里不对?
最佳答案
1 << n
意思是:添加n
1
的二进制表示末尾的零.
产生 1 * 2ⁿ = 2ⁿ
.在你的情况下,2³ = 8 = 1000<sub>2</sub>
.
n << 1
意思是:添加1
n
的二进制表示末尾的零.
产生 n * 2¹ = 2*n
.在你的情况下,2*3 = 6 = 110<sub>2</sub>
.
所以,问题是你混淆了1 << n
和 n << 1
.
关于javascript - 左移位以实现对两个 Javascript 的幂的求幂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33336423/