Operator Bit ECMAScript
- Halaman Sebelumnya Operator Satu Karakter
- Halaman Berikutnya Operator Logika
Operator bit beroperasi di tingkat dasar angka (yaitu 32 bit yang digunakan untuk merepresentasikan angka).
Kembali ke konsep bilangan bulat
ECMAScript memiliki dua tipe bilangan bulat, yaitu bilangan bulat bertanda (yang mengizinkan bilangan positif dan negatif) dan bilangan bulat tak bertanda (hanya mengizinkan bilangan positif). Pada ECMAScript, semua bilangan bulat literal adalah bilangan bulat bertanda, artinya apa?
Bilangan bulat bertanda menggunakan 31 bit untuk merepresentasikan nilai bilangan, dan bit ke-32 untuk merepresentasikan simbol bilangan, 0 untuk bilangan positif, dan 1 untuk bilangan negatif. Range nilai dari -2147483648 hingga 2147483647.
Ada dua cara untuk menyimpan bilangan bulat bertanda dalam bentuk biner, satu untuk bilangan positif dan satu untuk bilangan negatif. Bilangan positif disimpan dalam bentuk biner yang benar, setiap bit di 31 bit pertama mewakili kuadrat 2, mulai dari bit ke-1 (bit 0) yang mewakili 20Bit ke-2 (bit 1) menunjukkan 21Bit yang tidak digunakan diisi dengan 0, yaitu diabaikan. Sebagai contoh, gambar di bawah ini menunjukkan representasi angka 18.

Versi biner 18 hanya menggunakan 5 bit pertama, yang adalah bit yang efektif. Konversi angka ke string biner, Anda dapat melihat bit yang efektif:
var iNum = 18; alert(iNum.toString(2)); //menampilkan "10010"
Kode ini hanya menampilkan "10010", bukan representasi 32 bit dari 18. Bit lainnya tidak penting, karena hanya 5 bit pertama yang digunakan untuk menentukan nilai desimal ini. Sebagai contoh di bawah ini:

Negatif juga disimpan dalam bentuk kode biner, tetapi bentuknya adalah kode komplementer biner. Tahapan untuk menghitung kode komplementer biner angka ada tiga tahapan:
- Tentukan representasi biner versi non-negatif angka (contohnya, untuk menghitung kode komplementer biner -18, pertama-tama tentukan representasi biner 18)
- Dapatkan kode invers, yaitu mengganti 0 dengan 1 dan mengganti 1 dengan 0
- Tambahkan 1 ke kode invers
Untuk menentukan representasi biner -18, pertama-tama harus mendapatkan representasi biner 18, seperti yang ditunjukkan di bawah ini:
0000 0000 0000 0000 0000 0000 0001 0010
Selanjutnya, hitung kode invers biner, seperti yang ditunjukkan di bawah ini:
1111 1111 1111 1111 1111 1111 1110 1101
Akhirnya, tambahkan 1 ke kode invers biner, seperti yang ditunjukkan di bawah ini:
1111 1111 1111 1111 1111 1111 1110 1101 1 --------------------------------------- 1111 1111 1111 1111 1111 1111 1110 1110
Jadi, representasi biner -18 adalah 1111 1111 1111 1111 1111 1111 1110 1110. Ingat, dalam penggunaan integer bersimbol, para pengembang tidak dapat mengakses bit 31.
Menariknya, konversi integer negatif ke string biner ECMAScript tidak menampilkan dalam bentuk kode komplementer biner, tetapi menampilkan dengan menambahkan tanda negatif di depan kode biner absolut. Contohnya:
var iNum = -18; alert(iNum.toString(2)); //mengeluarkan "-10010"
Kode ini mengeluarkan "-10010", bukan kode biner komplementer, untuk menghindari akses ke bit 31. Untuk keperluan keudahan, ECMAScript memproses integer dengan cara yang sederhana, sehingga para pengembang tidak perlu memperhatikan penggunaannya.
Di sisi lain, integer tak bersimbol menganggap bit terakhir sebagai bit lain. Dalam mode ini, bit ke-32 tidak merepresentasikan simbol angka, tetapi nilai 2.31Karena bit ekstra ini, rentang nilai integer tak bersimbol adalah 0 sampai 4294967295. Untuk integer kurang dari 2147483647, integer tak bersimbol tampak sama seperti integer bersimbol, sedangkan integer yang lebih besar dari 2147483647 harus menggunakan bit 31 (dalam integer bersimbol, bit ini selalu 0).
Konversi integer tak bersimbol ke string hanya mengembalikan bit yang efektif.
Perhatian:Semua ekuivalen angka integer secara default disimpan sebagai integer bersimbol. Hanya operator bit ECMAScript yang dapat membuat integer tak bersimbol.
Operasi bit NOT
Operasi bit NOT ditandai dengan tanda negasi (~), ini adalah salah satu operator biner yang sedikit berhubungan dengan aritmetika biner dalam ECMAScript.
Operasi bit NOT adalah proses tiga tahap:
- Konversi operand ke angka 32 bit
- Konversi bilangan biner ke bentuk konversi bit negatif
- Konversi bilangan biner ke bilangan floating point
Contoh:
var iNum1 = 25; //25 sama dengan 00000000000000000000000000011001 var iNum2 = ~iNum1; //Dikonversi ke 11111111111111111111111111100110 alert(iNum2); //Output "-26"
Operasi bit NOT sebenarnya adalah melakukan pengurangan negatif, lalu mengurangi 1, jadi 25 menjadi -26. Cara lain untuk mendapatkan hal yang sama adalah:
var iNum1 = 25; var iNum2 = -iNum1 -1; alert(iNum2); //Output -26
Operasi bit AND
Operasi bit AND ditandai dengan tanda plus (&) dan langsung mengoperasikan bentuk biner angka. Dia mengatur setiap digit dari setiap angka dan lakukan operasi AND terhadap digit yang sama di posisi yang sama berdasarkan aturan berikut:
Digit angka pertama | Digit angka kedua | Hasil |
---|---|---|
1 | 1 | 1 |
1 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 0 |
Contoh, untuk melakukan operasi AND terhadap angka 25 dan 3, kode seperti berikut:
var iResult = 25 & 3; alert(iResult); //Output "1"
Hasil dari operasi AND antara 25 dan 3 adalah 1. Mengapa? Analisis seperti berikut:
25 = 0000 0000 0000 0000 0000 0000 0001 1001 3 = 0000 0000 0000 0000 0000 0000 0000 0011 --------------------------------------------- AND = 0000 0000 0000 0000 0000 0000 0000 0001
Dapat dilihat, di antara 25 dan 3, hanya ada digit satu (digit 0) yang mengandung angka 1, jadi, digit lainnya yang dihasilkan adalah 0, sehingga hasilnya adalah 1.
Operasi bit OR
Operasi bit OR ditandai dengan simbol (|) dan langsung mengoperasikan bentuk biner angka. Saat menghitung setiap digit, operator OR menggunakan aturan berikut:
Digit angka pertama | Digit angka kedua | Hasil |
---|---|---|
1 | 1 | 1 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
Menggunakan contoh yang sama seperti operator AND, lakukan operasi OR antara 25 dan 3, kode seperti berikut:
var iResult = 25 | 3; alert(iResult); //Output "27"
Hasil dari operasi OR antara 25 dan 3 adalah 27:
25 = 0000 0000 0000 0000 0000 0000 0001 1001 3 = 0000 0000 0000 0000 0000 0000 0000 0011 -------------------------------------------- OR = 0000 0000 0000 0000 0000 0000 0001 1011
Dapat dilihat, di antara dua angka, ada 4 digit yang menyimpan angka 1, digit-digitan ini disampaikan ke hasil. Kode biner 11011 sama dengan 27.
Operasi bit XOR
Operasi bit XOR ditandai dengan simbol (^), tentu saja, adalah operasi langsung terhadap bentuk biner. XOR berbeda dengan OR, hanya mengembalikan 1 saat hanya satu digit menyimpan 1. Tabel kebenaran seperti berikut:
Digit angka pertama | Digit angka kedua | Hasil |
---|---|---|
1 | 1 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
Untuk melakukan operasi XOR antara 25 dan 3, kode adalah:
var iResult = 25 ^ 3; alert(iResult); // output "26"
Hasil operasi XOR antara 25 dan 3 adalah 26:
25 = 0000 0000 0000 0000 0000 0000 0001 1001 3 = 0000 0000 0000 0000 0000 0000 0000 0011 --------------------------------------------- XOR = 0000 0000 0000 0000 0000 0000 0001 1010
Dapat dilihat, di dua angka, ada 4 digit yang menyimpan 1, digit ini disampaikan ke hasil. Kode biner 11010 sama dengan 26.
Gesar ke kiri
Gesar ke kiri ditandai dengan dua tanda lebih kecil (<<). Ia menggeser semua digit angka ke arah kiri sejumlah yang ditentukan. Contoh, geser angka 2 (sama dengan biner 10) ke kiri 5 digit, hasilnya adalah 64 (sama dengan biner 1000000):
var iOld = 2; // sama dengan biner 10 var iNew = iOld << 5; // sama dengan biner 1000000 desimal 64
Perhatian:Saat menggeser digit angka, di sisi kanan angka ada 5 digit kosong. Operasi geser ke kiri mengisi digit kosong ini dengan 0, sehingga hasilnya menjadi angka 32 bit yang lengkap.

Perhatian:Gesar ke kiri mempertahankan digit simbol angka. Contoh, jika -2 digeser ke kiri 5 digit, hasilnya adalah -64, bukan 64. “Apakah simbol masih disimpan di digit ke 32?” Ya, tapi hal ini dilakukan di latar belakang ECMAScript, pengembang tidak dapat mengakses digit ke 32 secara langsung. Meskipun menampilkan bilangan negatif dalam bentuk string biner, yang ditampilkan adalah bentuk simbol negatif (contoh, -2 akan ditampilkan -10).
Gesar ke kanan yang ber symbal (+)
Operator aritmatik geser ke kanan yang ber symbal (+) ditandai dengan dua tanda lebih besar (>>). Ia menggeser semua digit angka 32 bit secara keseluruhan ke kanan, sambil mempertahankan simbol angka (positif atau negatif). Operator geser ke kanan yang ber symbal (+) sama dengan geser ke kiri yang berlawanan. Contoh, geser 64 ke kanan 5 digit, akan menjadi 2:
var iOld = 64; // sama dengan biner 1000000 var iNew = iOld >> 5; // sama dengan biner 10 desimal 2
Sama seperti, setelah pindah bit akan terbentuk ruang kosong. Kali ini, ruang kosong berada di sisi kiri angka, tetapi setelah bit simbol. ECMAScript mengisi ruang kosong ini dengan nilai simbol simbol untuk menciptakan bilangan yang lengkap, seperti yang terlihat di gambar di bawah:

Shift Arah Kanan Tanpa Batas
Operator shift arah kanan tak signed ditandai dengan tiga tanda lebih (> > >), yang akan memgeser seluruh bit bilangan tak signed 32 bit. Untuk bilangan positif, hasil operasi shift arah kanan tak signed sama dengan operasi shift arah kanan signed.
Dengan contoh operasi shift arah kanan signed, jika 64 digeser ke kanan 5 bit, akan menjadi 2:
var iOld = 64; // sama dengan biner 1000000 var iNew = iOld >>> 5; // sama dengan biner 10 desimal 2
Untuk bilangan negatif, situasi berbeda.
Operasi shift arah kanan tak signed mengisi semua ruang kosong dengan 0. Untuk bilangan positif, ini sama dengan operasi shift arah kanan signed, sementara bilangan negatif dianggap seperti bilangan positif.
Karena hasil operasi shift arah kanan tak signed adalah bilangan positif 32 bit, operasi shift arah kanan tak signed bilangan negatif selalu menghasilkan angka yang sangat besar. Contohnya, jika -64 digeser ke kanan 5 bit, akan mendapatkan 134217726. Bagaimana mendapatkan hasil ini?
Untuk mencapai hal ini, perlu mengkonversi angka ini ke bentuk ekvivalen tak signed (walaupun angka ini sendiri masih signed), yang dapat didapatkan melalui kode berikut:
var iUnsigned64 = -64 >>> 0;
Lalu, ambil representasi bit sebenarnya dengan toString() tipe Number, yang menggunakan dasar 2:
alert(iUnsigned64.toString(2));
Ini akan menghasilkan 11111111111111111111111111000000, yang adalah representasi biner komplement negatif bilangan bulat -64, tetapi ini sama dengan bilangan bulat tak signed 4294967232.
Karena alasan ini, perhatian harus diberikan saat menggunakan operator shift arah kanan tanpa batas.
- Halaman Sebelumnya Operator Satu Karakter
- Halaman Berikutnya Operator Logika