Dalam JavaScript, semua variabel bilangan bulat bertanda bilangan bulat secara default. Apa artinya ini?
Bilangan bulat bertanda menggunakan 31 bit untuk melambangkan nilai bilangan bulat, dan bit 32 untuk melambangkan tanda bilangan bulat, 0 melambangkan bilangan positif, dan 1 melambangkan bilangan negatif.
Kisaran nilainya adalah dari -2^31 - 2^31-1, yaitu -2147483648 hingga 2147483647.
Saat JavaScript melakukan operasi bit, ia menggunakan tipe integer bertanda 32-bit, yang berarti hasil konversinya juga berupa tipe integer bertanda 32-bit. Terkadang akan terjadi hasil yang tidak diharapkan saat kita melakukan shifting. Berikut perbandingan antara bahasa C dan JS.
bahasa C
Copy kode kodenya sebagai berikut:
tidak ditandatangani int a = 3774191835u;
tidak ditandatangani int b = a >> 2;
/* b == 943547958 */
JavaScript
Copy kode kodenya sebagai berikut:
var a = 3774191835;
var b = a >> 2;
/* b == -130193866 */
Seperti yang Anda lihat, JavaScript menggunakan bilangan bulat bertanda saat melakukan operasi bit, jadi kami mendapatkan hasil yang berbeda. Bagaimana cara mengatasinya?
Kita dapat mengubah nomor yang ditandatangani di JavaScript menjadi nomor yang tidak ditandatangani. Lakukan saja operasi shift >>>0.
Sebaiknya tidak menggunakan >>. Disarankan menggunakan >>> karena bit paling kiri akan diurai sebagai bit tanda.