Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

Unsigned Right Shift Operator (>>>) ใน JavaScript คืออะไร? ตัวอย่างการใช้งาน

Unsigned Right Shift Operator (>>>) ใน JavaScript

ตัวดำเนินการ Unsigned Right Shift (>>>) เลื่อนบิต (Bitwise Shift) ไปทางขวา และ เติม 0 ด้านซ้าย (MSB) เสมอ ไม่สนใจเครื่องหมาย (Sign Bit) ทำให้ผลลัพธ์เป็น Unsigned 32-bit Integer เสมอ

ความแตกต่างระหว่าง >> (Signed) และ >>> (Unsigned)

ตัวอย่างโค้ด

<html>
  <body>
    <script>
      var a = -14;        // Binary (32-bit): 11111111 11111111 11111111 11110010
      var b = 2;          // Shift right 2 bits
      document.write("(a >>> b) => ");
      result = (a >>> b);
      document.write(result);  // แสดงผล: 1073741820
    </script>
  </body>
</html>

คำนวณแบบมือ: -14 >>> 2

  1. -14 ใน 32-bit Two's Complement: 11111111 11111111 11111111 11110010
  2. เลื่อนขวา 2 บิต: 00111111 11111111 11111111 11111100 (เติม 0 ด้านซ้าย)
  3. ค่า Unsigned: 1073741820

เปรียบเทียบ: -14 >> 2 = -4 (Sign Preserved: 11111111 11111111 11111111 11111100)

ตัวอย่างเพิ่มเติม

console.log(14 >>> 1);    // 7  (00001110 -> 00000111)
console.log(-14 >>> 1);   // 2147483641 (เติม 0 ด้านซ้าย)
console.log(0 >>> 5);     // 0
console.log(-1 >>> 0);    // 4294967295 (Max Uint32: 0xFFFFFFFF)
console.log(255 >>> 8);   // 0
console.log(0xFFFFFFFF >>> 0); // 4294967295 (Convert to Uint32)

การประยุกต์ใช้งานจริง

  1. แปลง Signed เป็น Unsigned 32-bit: value >>> 0
  2. Bitmask Operations: จัดการ Flags, Permissions, Color Values (RGBA)
  3. Hashing/Checksum Algorithms: CRC32, MurmurHash, จำเป็นต้องใช้ Unsigned Math
  4. Network Programming: IP Address Manipulation, Packet Parsing
  5. Performance: บางกรณีเร็วกว่า Math.floor สำหรับ Positive Numbers

ข้อควรระวัง

  • JavaScript จัดเก็บตัวเลขเป็น IEEE 754 Double (64-bit Float) แต่ Bitwise Operators ทำงานบน 32-bit Signed Integer แล้วคืนค่าเป็น Number (Float)
  • >> 0 เป็น Idiom ยอดนิยมสำหรับแปลงค่าใดๆ ให้เป็น Unsigned 32-bit Integer
  • ไม่ควรใช้กับตัวเลขใหญ่กว่า 2^53-1 (Safe Integer Limit) จะสูญเสีย Precision

สรุป

>>> (Signed Right Shift) รักษาเครื่องหมาย >>> (Unsigned Right Shift) เติม 0 ด้านซ้ายเสมอ ผลลัพธ์เป็น Unsigned 32-bit Integer ใช้ใน Bit Manipulation, Hashing, Network Code และแปลง Signed → Unsigned

Operatorชื่อการเติมบิตด้านซ้ายผลลัพธ์
>>Signed Right Shiftคัดลอก Sign Bit (Preserve Sign)Signed 32-bit Integer (อาจเป็นลบ)
>>> Unsigned Right Shiftเติม 0 เสมอ (Zero Fill)Unsigned 32-bit Integer (ไม่เป็นลบเลย)