➗ 取模 / 取余与位运算

取模区:ab。位运算区:xy、移位 k、位宽 W——位移、rol/rorpopcount/clz/ctz(均基于 asUintN(W,x))、以及 &|^ 的 BigInt 与 W 位两套结果。

输入支持 BigInt 整数
结果商、余数、模、整除
位运算位移 / 旋转 / 计数 / 与或异或
u = asUintN(W,x);逻辑右移、rol/ror、位计数与「W 位」位运算均基于此宽度。
位运算结果移位 · 旋转 · 计数 · &| ^

适用场景

取模/取余常用于循环下标、奇偶判断、哈希分桶、分页偏移、时间周期、密码学算法练习和编程语言行为核对。位移常用于标志位、权限掩码、哈希与校验、固定宽度协议字段、以及核对某语言对移位是否符合预期。

取模与取余的区别

ab 都是正数时,取余和取模通常结果相同;出现负数时,不同语言的规则可能不同。JavaScript 的 % 是余数运算,结果符号跟被除数一致;数学 modulo 通常把结果规范到 0 <= r < |b|

位移:算术右移、逻辑右移与 JavaScript >>>

左移 x << k 等价于乘以 2^k(BigInt 溢出语义由类型本身决定,不存在固定宽度截断,除非你在别处掩码)。算术右移 x >> k 对负数会在高位补 1。逻辑右移按无符号位串理解:本页用 BigInt.asUintN(W, x) 把值限制在 W 位无符号范围,再执行 >> k,用于对齐「W 位 CPU / 协议字」上的逻辑右移。

注意:JavaScript 中 >>> 只对被转成 32 位无符号整数之后Number 有意义;BigInt 没有 >>>。若你把本页的 W 设为 32,可与「先把数值落到 32 位再 >>>」的心智模型对照。

循环移位与位计数

rol / roru = asUintN(W, x) 上操作,旋转量取 k mod WW=1 时恒等)。popcount 统计 u 中 1 的个数。clzW 位视角下的前导零个数(u=0 记为 W);ctz 为尾随零个数(u=0 记为 W,表示字内全零)。

与 / 或 / 异或

同时给出两套:BigInt 原始(按语言无限精度逐位运算)与 W 位无符号(两操作数先 asUintN 再运算并绕回)。对照寄存器或协议字段时用后者;核对 JS BigInt 表达式时用前者。

使用建议

  • 如果用于数组下标循环,建议使用数学 modulo,避免负数下标。
  • 如果要模拟某门语言的行为,请按该语言文档确认商的取整方式。
  • 本工具只处理整数;小数取模、IEEE 浮点误差和补码溢出不在本页处理。
  • 位移位数请使用非负整数;左移对 BigInt 会拉长位数,本页仍限制 k 上限以防卡顿;旋转仅依赖 k mod W
  • 需要做进制换算可使用 进制转换器;需要 IP 网段数量与范围可使用 IP 子网/CIDR 计算器

隐私说明

计算在浏览器本地完成(详见 隐私说明),输入数字不会上传到服务器。