å·¦ã·ããæ¼ç®å (<<)
Baseline
åºãå©ç¨å¯è½
ãã®æ©è½ã¯åºãå®è£ ããã¦ãããå¤ãã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã©ã¦ã¶ã¼ã§åä½ãã¾ãã2015å¹´7æä»¥éããã¹ã¦ã®ãã©ã¦ã¶ã¼ã§å©ç¨å¯è½ã§ãã
å·¦ã·ããæ¼ç®å (<<) ã¯ã 1 ã¤ç®ã®ãªãã©ã³ããæå®ããããããæ°ã ãå·¦ã«ãããããã¤ããªã¼è¡¨ç¾ãæã¤ãæ°å¤ã¾ãã¯é·æ´æ°ãè¿ãã¾ããå·¦ã«ãããã¦ããµãããããã¯ç ´æ£ãããå³ãã 0 ã®ããããå
¥ãã¾ãã
試ãã¦ã¿ã¾ããã
const a = 5; // 00000000000000000000000000000101
const b = 2; // 00000000000000000000000000000010
console.log(a << b); // 00000000000000000000000000010100
// äºæ³ãããçµæ: 20
æ§æ
x << y
解説
<< æ¼ç®åã¯ãæ°å¤ã¨é·æ´æ°ã® 2 種é¡ã®ãªãã©ã³ãã«å¯¾ãã¦ãªã¼ãã¼ãã¼ãããã¦ãã¾ããæ°å¤ã®å ´åããã®æ¼ç®å㯠32 ãããæ´æ°ãè¿ãã¾ãã é·æ´æ°ã®å ´åãæ¼ç®åã¯é·æ´æ°ãè¿ãã¾ããæåã®ä¸¡ãªãã©ã³ããæ°å¤åã«å¤æãããããã®åãæ¤æ»ãã¾ãã両ãªãã©ã³ããé·æ´æ°ã«ãªã£ãå ´åãé·æ´æ°ã®å·¦ã·ãããå®è¡ãã¾ããããã§ãªãå ´åã両ãªãã©ã³ãã 32 ãããæ´æ°ã«å¤æããæ°å¤ã®å·¦ã·ãããå®è¡ãã¾ãã䏿¹ã®ãªãã©ã³ããé·æ´æ°ã«ãªãããã䏿¹ãæ°å¤ã«ãªã£ãå ´åã TypeError ãçºçãã¾ãã
ãã®æ¼ç®åã¯ãå·¦ãªãã©ã³ãã®ããã表ç¾ã 2 ã®è£æ°ã§æ¼ç®ãã¾ããä¾ãã° 9 << 2 㯠36 ã«ãªãã¾ãã
9 (10 鲿°): 00000000000000000000000000001001 (2 鲿°)
--------------------------------
9 << 2 (10 鲿°): 00000000000000000000000000100100 (2 鲿°) = 36 (10 鲿°)
ä»»æã®æ° x ã y ãããåã ãå·¦ã«ãããåä½ã«ãããã¨ã x * 2 ** y ã«ãªãã¾ãã
ã§ããããä¾ãã° 9 << 3 㯠9 * (2 ** 3) = 9 * (8) = 72 ã«ãªãã¾ãã
å·¦ãªãã©ã³ãã 32 ããããè¶ ããæ°å¤ã®å ´åãä¸ä½å´ã®ããããç ´æ£ããã¾ããä¾ãã°ã以ä¸ã® 32 ããããè¶ ããæ´æ°ã¯ 32 ãããæ´æ°ã«å¤æããã¾ãã
Before: 11100110111110100000000000000110000000000001 After: 10100000000000000110000000000001
å³ãªãã©ã³ãã¯ç¬¦å·ãªã 32 ãããæ´æ°ã«å¤æããããã®å¾ã¢ã¸ã¥ã 32 ãåããã¾ãããããã£ã¦ãå®éã®ã·ããéã¯å¸¸ã« 0 ä»¥ä¸ 31 以ä¸ã®æ£ã®æ´æ°ã¨ã¿ãªããã¾ããä¾ãã°ã100 << 32 㯠100 << 0 ã¨åãçµæ (100) ã«ãªãã¾ãããã㯠32 ã¢ã¸ã¥ã 32 ã 0 ã¨ãªãããã§ãã
è¦å:
æ´æ°ã«åãè©°ããããã« << 0 ã使ç¨ããä¾ãè¦ãããããããã¾ãããä»»æã®æ°å¤ x ã 0 ãããå·¦ã·ããããã¨ãx ã 32 ãããæ´æ°ã«å¤æãããããã« -2147483648 ãã 2147483647 ã®ç¯å²å¤ã®æ°ã®å
è¡ããããé¤å»ãããçµæãå¾ããã¾ãã代ããã«Math.trunc()ã使ç¨ãã¦ãã ããã
é·æ´æ°ã§ã¯åãæ¨ã¦ã¯çºçãã¾ãããæ¦å¿µçã«ã¯ãæ£ã®é·æ´æ°ã¯å
é ã«ç¡éã® 0 ããããæã¡ãè² ã®é·æ´æ°ã¯å
é ã«ç¡éã® 1 ããããæã¤ã¨è§£éãã¾ãã
ä¾
>å·¦ã·ããæ¼ç®åã®ä½¿ç¨
9 << 3; // 72
// 9 * (2 ** 3) = 9 * (8) = 72
9n << 3n; // 72n
仿§æ¸
| 仿§æ¸ |
|---|
| ECMAScript® 2027 Language Specification > # sec-left-shift-operator > |