通过MCP连接 →

输入计算

数学公式

广告

结果

位移结果
64
十进制值
输入数值 16
移动位数(比特) 2

什么是位移?

位移(bit shift)是指把一个整数的二进制位向左或向右移动指定的位数。它是编程中的基础运算,广泛应用于底层性能优化、图形处理、哈希算法和嵌入式开发等场景。左移n << k)会把所有二进制位往高位方向移动,低位用 0 补齐;而右移n >> k)则把二进制位往低位方向移动。

一行8个二进制数字格,箭头显示位向左和向右移动
位移会把每个位向左或向右移动固定的位数。

如何使用本计算器

输入整数 n、移动的位数 k,再选择移动方向,计算器即可给出运算后的十进制结果。本工具采用 64 位有符号整数运算,与大多数编程语言的行为保持一致。

公式详解

每向左移动一位,数值就会翻一倍,因此左移 \(k\) 位相当于乘以 \(2^{k}\):

$$\text{Result} = \text{Number (n)} \ll \text{Shift (k)} = n \times 2^{k}$$

每向右移动一位,数值就会减半并向下取整,因此右移 \(k\) 位相当于对 \(2^{k}\) 做整数除法:

$$\text{Result} = \text{Number (n)} \gg \text{Shift (k)} = \left\lfloor \frac{n}{2^{k}} \right\rfloor$$

正因如此,在硬件层面位移运算的开销远低于乘法和除法。

向左移一位时位向左移动,右侧补零;数值翻倍
每向左移一位,数值就乘以二;向右移一位则减半。

实例演示

以 \(n = 16\)、左移 \(k = 2\) 为例。16 的二进制是 10000,左移两位就是在末尾补上两个 0,得到 1000000,即 64。用算式表示就是 $$16 \times 2^{2} = 16 \times 4 = 64$$ 反过来,$$64 \gg 2 = \left\lfloor \frac{64}{4} \right\rfloor = 16$$ 又回到了原始数值。

二的幂次参考表

左移\(k\)位将一个数乘以\(2^k\);右移\(k\)位除以\(2^k\)(整数舍弃余数)。使用此表可立即读出给定移位数量的乘数或除数。

移位 \(k\) \(2^k\)(十进制) \(\ll k\) / \(\gg k\)的含义
0 1 无变化
1 2 \(\times 2\) / \(\div 2\)
2 4 \(\times 4\) / \(\div 4\)
3 8 \(\times 8\) / \(\div 8\)
4 16 \(\times 16\)
5 32 \(\times 32\)
6 64 \(\times 64\)
7 128 \(\times 128\)
8 256 \(\times 256\)(1字节)
9 512 \(\times 512\)
10 1,024 \(\times 1024\)(1 KiB)
11 2,048 \(\times 2048\)
12 4,096 \(\times 4096\)
13 8,192 \(\times 8192\)
14 16,384 \(\times 16384\)
15 32,768 \(\times 32768\)
16 65,536 \(\times 65536\)(2字节)
17 131,072
18 262,144
19 524,288
20 1,048,576 \(\times\) 1 MiB
32 4,294,967,296 32位边界
63 9,223,372,036,854,775,808 64位有符号整数的最高位

常见问题

左移会丢失数据吗? 会。超出整数位宽的二进制位会被丢弃(溢出)。在 64 位范围内,本计算器能完整保留数值。

负数右移会怎样? 本计算器采用算术(有符号)右移,会保留符号位,因此负数右移后仍然是负数。

为什么用位移代替乘除? 在大多数 CPU 上,位移是单周期运算,因此用它来乘以或除以 2 的幂运算速度非常快。

最后更新: