Movatterモバイル変換


[0]ホーム

URL:


  1. 面向开发者的 Web 技术
  2. JavaScript
  3. JavaScript 参考
  4. 表达式和运算符
  5. 无符号右移(>>>)

此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。

View in EnglishAlways switch to English

无符号右移(>>>)

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨2015年7月⁩.

无符号右移运算符(>>>(零填充右移)将左操作数计算为无符号数,并将该数字的二进制表示形式移位为右操作数指定的位数,取模 32。向右移动的多余位将被丢弃,零位从左移入。其符号位变为0,因此结果始终为非负数。与其他按位运算符不同,零填充右移返回一个无符号 32 位整数。

尝试一下

const a = 5; //  00000000000000000000000000000101const b = 2; //  00000000000000000000000000000010const c = -5; //  11111111111111111111111111111011console.log(a >>> b); //  00000000000000000000000000000001// Expected output: 1console.log(c >>> b); //  00111111111111111111111111111110// Expected output: 1073741822

语法

js
a >>> b

描述

该运算符将第一个操作数向右移动指定的位数。向右移动的多余位将被丢弃。零位从左侧移入。其符号位变为0,因此其表示的结果始终为非负数。与其他按位运算符不同,零填充右移返回无符号 32 位整数。

以十进制(以 10 为基数)数字9-9 的 32 位二进制表示为例:

     9 (base 10): 00000000000000000000000000001001 (base 2)    -9 (base 10): 11111111111111111111111111110111 (base 2)

请注意,负十进制(以 10 为基数)数字-9 的二进制表示形式是正十进制(以 10 为基数)数字9二进制补码。也就是说,它是通过反转00000000000000000000000000001001 的所有位并添加1 来计算的。

在这两种情况下,二进制数的符号都由其最左边的位给出:对于正十进制数9,二进制表示的最左边位是0,对于负十进制数-9,二进制表示的最左边位是1

对于正数9,零填充右移和符号传播右移产生相同的结果:9 >>> 2 产生2,与9 >> 2 相同:

      9 (base 10): 00000000000000000000000000001001 (base 2)                   --------------------------------9 >>  2 (base 10): 00000000000000000000000000000010 (base 2) = 2 (base 10)9 >>> 2 (base 10): 00000000000000000000000000000010 (base 2) = 2 (base 10)

请注意,最右边的两个位01 被移出,两个零从左边移入。

但是,请注意-9 会发生什么情况:-9 >> 2符号传播右移)产生-3,但-9 >>> 2(零填充右移)产生 1073741821:

      -9 (base 10): 11111111111111111111111111110111 (base 2)                    ---------------------------------9 >>  2 (base 10): 11111111111111111111111111111101 (base 2) = -3 (base 10)-9 >>> 2 (base 10): 00111111111111111111111111111101 (base 2) = 1073741821 (base 10)

请注意最右边的两个位11 是如何移出的。对于-9 >> 2符号传播右移),最左边的1 位的两个副本已从左侧移入,这保留了负号。另一方面,对于-9 >>> 2(零填充右移),零从左移入,因此不会保留数字的负号,结果是一个(大)正数。

左操作数将被转换为无符号 32 位整数,这意味着浮点数将被截断,而超出 32 位边界的数字将溢出/下溢。

右操作数将转换为无符号的 32 位整数,然后取模 32,因此实际移位偏移量将始终是介于 0 和 31 之间的正整数(包括 0 和 31)。例如,100 >>> 32100 >>> 0 相同(并产生100),因为 32 模 32 是 0。

示例

使用无符号右移

js
9 >>> 2; // 2-9 >>> 2; // 1073741821

规范

Specification
ECMAScript® 2026 Language Specification
# sec-unsigned-right-shift-operator

浏览器兼容性

参见

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp