æ 符å·å³ç§»ï¼>>>ï¼
åºçº¿
广æ³å¯ç¨
èª 2015å¹´7æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
æ 符å·å³ç§»è¿ç®ç¬¦ï¼>>>ï¼ï¼é¶å¡«å
å³ç§»ï¼å°å·¦æä½æ°è®¡ç®ä¸ºæ ç¬¦å·æ°ï¼å¹¶å°è¯¥æ°åçäºè¿å¶è¡¨ç¤ºå½¢å¼ç§»ä½ä¸ºå³æä½æ°æå®ç使°ï¼å模 32ãåå³ç§»å¨çå¤ä½ä½å°è¢«ä¸¢å¼ï¼é¶ä½ä»å·¦ç§»å
¥ãå
¶ç¬¦å·ä½å为 0ï¼å æ¤ç»æå§ç»ä¸ºéè´æ°ãä¸å
¶ä»æä½è¿ç®ç¬¦ä¸åï¼é¶å¡«å
å³ç§»è¿åä¸ä¸ªæ ç¬¦å· 32 使´æ°ã
å°è¯ä¸ä¸
const a = 5; // 00000000000000000000000000000101
const b = 2; // 00000000000000000000000000000010
const c = -5; // 11111111111111111111111111111011
console.log(a >>> b); // 00000000000000000000000000000001
// Expected output: 1
console.log(c >>> b); // 00111111111111111111111111111110
// Expected output: 1073741822
è¯æ³
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 >>> 32 ä¸ 100 >>> 0 ç¸åï¼å¹¶äº§ç 100ï¼ï¼å 为 32 模 32 æ¯ 0ã
示ä¾
>ä½¿ç¨æ 符å·å³ç§»
9 >>> 2; // 2
-9 >>> 2; // 1073741821
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification> # sec-unsigned-right-shift-operator> |