Liburan Tahun Baru akan segera hadir, dan saya akhirnya memiliki waktu luang. Saya mengunjungi berbagai artikel teknis setiap hari, dan ini dalam keadaan hebat.
Saya membaca sebuah artikel tentang JS di sore hari, dan ada paragraf seperti ini yang menarik perhatian saya.
Salinan kode adalah sebagai berikut:
(fungsi () {
nama var = [];
return function (name) {
addName (nama);
}
fungsi addName (name) {
if (! ~ names.indexof (name)) // jika ada, jangan tambahkan
names.push (nama);
console.log (nama); // ["linkfly"]
}
} ()) ('LinkFly');
Apa arti operator "! ~" Dalam if (! ~ Names.indexof (name))? Jika Anda tidak mengerti, mulailah dengan ~ dulu.
Tes dapat menunjukkan bahwa nilai hasil memiliki aturan ini - (x+1)
Setelah mencari, beberapa artikel hanya kehilangan satu kalimat: putar terbalik dengan bit biner
Dari makna literal, di sini kita menggunakan representasi biner delapan digit: 3 = 00000011, lalu ~ 3 = 11111100, formula di atas salah.
Penjelasan di atas masih terlalu abstrak dan tidak spesifik. Bahkan, ini melibatkan pengetahuan kode asli, kode terbalik, dan kode komplemen.
Kode asli
Bit tertinggi dari representasi kode asli adalah bit tanda, yaitu 0 untuk menunjukkan angka positif dan 1 untuk menunjukkan angka negatif. Bit yang tersisa mewakili nilai absolut dari angka tersebut.
Kode terbalik
Untuk nomor yang ditandatangani, kode terbalik dari angka positif sama dengan kode aslinya; Kode terbalik dari angka negatif adalah kebalikan bit dari bit kecuali bit tanda. Kode terbalik sering digunakan sebagai bentuk perantara dalam proses menemukan kode komplemen.
Melengkapi
Komplemen angka positif sama dengan kode aslinya dan kode terbalik; Komplemen angka negatif adalah untuk membalikkan kode aslinya kecuali bit tanda, dan tambahkan 1 ke bit terakhir, yaitu, tambahkan 1 ke komplemen nomor. Angka di komputer umumnya dinyatakan dalam bentuk komplemen. Dalam kode komplemen, (-128) D digunakan sebagai ganti (-0) d. Catatan: (-128) D tidak memiliki kode asli yang sesuai dan kode terbalik, (-128) d = (1000.000) b.
Temukan operasi pelengkap
Operasi komplemen tidak mempertimbangkan bit tanda, tetapi membalikkan bit asli dari kode aslinya, dan menambahkan 1 ke bit terakhir. Komplemen angka adalah komplemen dari angka yang berlawanan.
Ambil contoh artikel penulis dan pahami
~ berarti inversi bitwise. Jika 00111, menjadi 11000 (inversi bitwise)
Representasi biner dari 57 adalah (1 byte): 00111001
Biner After Bitwise Inversion (~ 57): 11000110 Ini dinyatakan sebagai desimal: -70
Ini adalah angka negatif, angka yang ditandatangani. Angka negatif harus dinyatakan dalam komputer menggunakan kode komplemennya: komplemen = bit simbol terbalik dan kemudian ditambahkan 1.
Oleh karena itu, setelah tanda tanda -70 (11000110) terbalik setelah bitwise, itu (10111001) dan kemudian tambahkan 1, itu (10111010)
Ubah ke sistem desimal: -58
Oleh karena itu ~ 57 = -58
Pada titik ini, saya akhirnya mengetahuinya. Meskipun rumus ringkasan dapat dengan cepat menarik hasil, itu tidak dapat menjelaskan alasannya. Sebagai teknisi, kami suka belajar dan masuk ke dalam detail.
Beri waktu:
Fondasi adalah landasan dari semua tingkat atas. Jika Anda mengabdikan diri untuk berlatih Taoisme, jalannya panjang.
Di atas adalah seluruh konten artikel ini. Saya berharap semua orang bisa mendapatkan sesuatu.