Bilangan Biner: Konversi, Operasi, Bit, dan Komplemen Dua
Komputasi Sistem bilangan Dasar Python JavaScript
Jawaban singkat
Bilangan biner adalah bilangan yang ditulis dalam basis 2, hanya dengan angka 0 dan 1, tempat tiap angka bernilai dua kali tempat di kanannya: 1011_2=8+2+1=11. Komputer memakainya karena sebuah saklar punya dua keadaan, dan setiap bilangan, huruf, dan gambar disimpan sebagai untaian bit ini. Untuk mengubah, jumlahkan pangkat 2 di bawah angka 1, atau bagi 2 berulang kali lalu baca sisanya dari bawah ke atas.
Poin penting
- Biner adalah nilai tempat dalam basis 2: tempatnya bernilai 1,2,4,8,16,…, dan satu angka adalah satu bit, 0 atau 1.
- n bit memuat 2^n nilai, dari 0 sampai 2^n-1; satu byte adalah 8 bit dan memuat 256 nilai.
- Heksadesimal adalah singkatan biner: satu angka heksadesimal tepat empat bit, sehingga
FFadalah 11111111_2=255. - Dalam biner 1+1=10: jumlahkan kolom demi kolom dengan membawa 1; mengalikan adalah menggeser dan menjumlahkan, dan menggandakan adalah menambah angka 0 di ujung.
- Bilangan bulat negatif memakai komplemen dua: balik bit-bitnya dan tambah 1, sehingga -5 adalah 11111011 dalam 8 bit dan bit paling kiri bernilai -2^n-1.
- Pecahan berakhir dalam biner hanya bila penyebutnya pangkat 2, sehingga 0,1 berulang (0,0(0011 repeating)_2) dan float hanya dapat menyimpannya secara hampiran.
Apa itu bilangan biner?
Bilangan biner ditulis dalam basis 2: ia hanya memakai dua angka 0 dan 1, yang disebut bit (dari binary digit), dan tiap tempat bernilai dua kali tempat di kanannya. Bilangan desimal biasa bekerja dengan cara yang sama dengan sepuluh angka dan tempat bernilai 1, 10, 100, 1000. Pada keduanya, nilai sebuah angka bergantung pada tempatnya, yaitu gagasan nilai tempat yang ada di setiap sistem posisi.
Nilai tempat dalam biner adalah pangkat 2, dihitung dari kanan mulai 2^0 (lihat eksponen):
| Tempat | 2^7 | 2^6 | 2^5 | 2^4 | 2^3 | 2^2 | 2^1 | 2^0 |
|---|---|---|---|---|---|---|---|---|
| Nilai | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
| Bit | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 0 |
Bilangan pada tabel itu adalah 01011010_2=64+16+8+2=90. Angka subskrip 2 menyatakan basisnya, sebab 10_2 adalah dua tetapi 10 adalah sepuluh.
Menghitung dalam biner sama dengan menghitung dalam desimal dengan hanya dua angka. Ketika angka terakhir mencapai 1, hitungan berikutnya membawa ke tempat selanjutnya, seperti 9 menjadi 10 dalam desimal:
| Desimal | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|---|
| Biner | 0 | 1 | 10 | 11 | 100 | 101 | 110 | 111 |
| Desimal | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|---|---|---|
| Biner | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 |
Mengapa komputer memakai biner. Transistor menghantar atau tidak, bintik magnetik menghadap ke satu arah atau yang lain, lubang pada cakram ada atau tidak. Dua keadaan mudah dibedakan bahkan ketika sinyalnya berderau, sehingga mesin dapat menyalin dan mengolahnya tanpa galat; sepuluh tingkat tegangan jauh lebih sulit. Segala yang lain, bilangan, teks, gambar, dan suara, lebih dulu diubah menjadi bilangan lalu menjadi bit. Bit terakhir juga memberi tahu hal sederhana: bilangan biner genap bila berakhir 0, seperti pada bilangan genap dan ganjil di artikel bilangan bulat.
Coba: membaca bilangan biner
Berapakah 1101_2 dalam desimal?
Bagaimana mengubah antara biner, desimal, dan heksadesimal?
Untuk mengubah biner menjadi desimal, jumlahkan nilai tempat angka 1; untuk mengubah desimal menjadi biner, bagi 2 berulang kali dan baca sisanya dari bawah ke atas. Keduanya hanya memakai pangkat 2.
Biner ke desimal. 1011010_2 punya angka 1 di tempat bernilai 64, 16, 8, dan 2, sehingga ia 64+16+8+2=90.
Desimal ke biner. Bagi 2, tulis sisanya, dan lanjutkan dengan hasil baginya sampai mencapai 0. Untuk 90:
| Pembagian | Hasil bagi | Sisa |
|---|---|---|
| 90÷2 | 45 | 0 |
| 45÷2 | 22 | 1 |
| 22÷2 | 11 | 0 |
| 11÷2 | 5 | 1 |
| 5÷2 | 2 | 1 |
| 2÷2 | 1 | 0 |
| 1÷2 | 0 | 1 |
Baca sisanya ke atas: 1011010_2. Ini pembagian bersisa yang sama dengan pada artikel bilangan bulat, dan sisa terakhir adalah angka paling kiri karena ia tempat tertinggi.
Oktal dan heksadesimal. Untai biner panjang, sehingga pemrogram mengelompokkan bit. Tiga bit membentuk satu angka oktal (basis 8, angka 0 sampai 7) dan empat bit membentuk satu angka heksadesimal (basis 16, angka 0 sampai 9 lalu A sampai F untuk 10 sampai 15):
| Biner | 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 |
|---|---|---|---|---|---|---|---|---|
| Heks | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| Biner | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 |
|---|---|---|---|---|---|---|---|---|
| Heks | 8 | 9 | A | B | C | D | E | F |
Kelompokkan dari kanan: 01011010_2 adalah 0101 1010, yaitu 5A_16, dan 5·16+10=90. Satu byte selalu tepat dua angka heksadesimal, itulah sebabnya FF adalah 11111111_2=255. Heksadesimal adalah cara menulis warna di web: #FF8800 adalah merah 255, hijau 88_16=136, dan biru 0, sebuah oranye. Oktal masih bertahan pada izin berkas Unix, tempat 755 adalah 111 101 101, baca, tulis, dan eksekusi untuk pemilik serta baca dan eksekusi untuk semua yang lain.
Ketik bilangan di bawah dalam basis apa pun dan lihat dalam keempatnya.
Interaktif: ubah antara biner, oktal, desimal, dan heksadesimal
Ketik bilangan bulat dalam salah satu dari empat basis dan lihat dalam semuanya, beserta tangga pembagian yang menghasilkan angka bitnya.
Coba: desimal ke biner
Tulis 45 dalam biner.
Coba: heksadesimal
Berapakah 2F_16 dalam desimal?
- 47
- 215
- 41
- 32
Bagaimana menjumlah, mengurang, dan mengalikan dalam biner?
Aritmetika biner memakai metode kolom yang sama dengan desimal, dengan hanya empat jumlah yang perlu diingat: 0+0=0, 0+1=1, 1+0=1, dan 1+1=10, yang berarti tulis 0 dan bawa 1. Menjumlahkan tiga angka 1 dalam satu kolom menghasilkan 11_2: tulis 1 dan bawa 1.
Penjumlahan. Kerjakan dari kanan dan bawa ke kiri. Untuk 1011_2+110_2:
Kolom demi kolom, dari kanan: 1+0=1; 1+1=10, tulis 0 dan bawa 1; 0+1+1=10, tulis 0 dan bawa 1; 1+0+1=10, tulis 0 dan bawa 1; bawaan menjadi angka 1 di depan. Hasilnya 10001_2, dan sebagai pemeriksaan 11+6=17.
Pengurangan. Bila sebuah kolom tidak dapat dikurangi angkanya, pinjam 1 dari kolom di kiri, yang bernilai 2 pada kolom yang sedang kamu kerjakan. Untuk 1011_2-110_2 jawabannya 101_2, dan 11-6=5. Komputer jarang mengurangi dengan cara ini: ia menjumlahkan komplemen dua, pada bagian bilangan negatif.
Perkalian. Setiap bit pada bilangan bawah memberi 0 atau salinan bilangan atas yang digeser ke kiri, dan salinannya dijumlahkan. 101_2×11_2 adalah 101+1010=1111_2, dan 5·3=15. Tidak ada tabel perkalian yang perlu dipelajari, hanya menggeser dan menjumlahkan, itulah sebabnya pengali perangkat keras sederhana.
Menggandakan dan membagi dua. Menambah angka 0 di ujung menggandakan bilangan biner (101_2=5, 1010_2=10), seperti menambah 0 mengalikan bilangan desimal dengan sepuluh. Membuang bit terakhir membaginya dua dan membuang sisanya. Inilah gagasan di balik geseran bit di bawah.
Coba penjumlahan buatanmu sendiri; langkahnya ditampilkan sebagai susunan kolom.
Interaktif: jumlah, kurang, dan kali dalam biner
Masukkan dua bilangan biner dan perhatikan langkah per kolom, beserta bawaan dan pinjaman atau hasil kali parsial yang digeser, diperiksa dengan desimal.
Coba: menjumlah dalam biner
Jumlahkan kedua bilangan biner.
Berapa nilai yang dapat dimuat bit, dan apa itu byte?
n bit dapat memuat 2^n nilai berbeda, yaitu bilangan dari 0 sampai 2^n-1, karena tiap bit tambahan menggandakan banyak pola. Satu byte adalah 8 bit sehingga memuat 2^8=256 nilai, 0 sampai 255.
| Bit | Nilai | Rentang tanpa tanda | Nama umum |
|---|---|---|---|
| 1 | 2 | 0 sampai 1 | sebuah bit |
| 4 | 16 | 0 sampai 15 | sebuah nibble, satu angka heksadesimal |
| 8 | 256 | 0 sampai 255 | sebuah byte |
| 16 | 65.536 | 0 sampai 65.535 | sebuah short |
| 32 | 4.294.967.296 | 0 sampai 4.294.967.295 | int di banyak bahasa |
| 64 | 18.446.744.073.709.551.616 | 0 sampai 18.446.744.073.709.551.615 | sebuah long |
Ukuran. Satu kilobita (kB) adalah 1000 byte dalam sistem SI, tetapi memori berukuran pangkat 2, sehingga pada 1998 IEC menamai satuan biner: satu kibibyte (KiB) adalah 2^10=1024 byte, satu mebibyte (MiB) adalah 2^20=1.048.576 byte, dan satu gibibyte (GiB) adalah 2^30 byte. Cakram yang dijual 500 GB (pangkat 1000) tampak sekitar 465 GiB pada sistem operasi yang menghitung dengan pangkat 1024, yang menjadi sumber umum ruang yang "hilang".
Teks. Sebuah karakter disimpan sebagai bilangan. ASCII, dari 1963, memberi kode 0 sampai 127 untuk huruf Inggris, angka, tanda baca, dan kode kendali, dan muat dalam 7 bit. Huruf A adalah 65, yaitu 01000001_2, dan a adalah 97, yaitu 01100001_2. Keduanya berbeda tepat satu bit, yang bernilai 32, sehingga mengubah huruf besar-kecil huruf ASCII berarti membalik bit itu. Unicode memperluas gagasan ini ke semua sistem tulisan, dan UTF-8 menyimpan setiap titik kode dalam 1 sampai 4 byte.
Klik bit-bit sebuah byte di bawah dan perhatikan bilangan, dua cara membacanya, dan karakternya berubah.
Interaktif: balik bit-bit satu byte
Klik bit satu per satu dan baca bilangannya sebagai tanpa tanda, sebagai komplemen dua bertanda, dalam heksadesimal dan oktal, dan sebagai karakter ASCII.
Coba: berapa nilai?
Berapa nilai berbeda yang dapat dimuat 10 bit?
- 100
- 512
- 1024
- 2048
Bagaimana bilangan negatif disimpan dalam biner?
Komputer menyimpan bilangan bulat negatif dalam komplemen dua: bit paling kiri bernilai -2^n-1 dan bukan +2^n-1, sehingga rangkaian penjumlah yang sama bekerja untuk bilangan positif dan negatif. Untuk menegasikan sebuah bilangan, balik setiap bit lalu tambah 1.
Untuk 8 bit, mendapatkan -5: mulai dari 5=00000101, balik menjadi 11111010, lalu tambah 1 menjadi 11111011. Bacalah dengan bit teratas bernilai -128: -128+64+32+16+8+2+1=-5.
| Pola 8 bit | Tanpa tanda | Bertanda |
|---|---|---|
| 00000000 | 0 | 0 |
| 00000001 | 1 | 1 |
| 01111111 | 127 | 127 |
| 10000000 | 128 | −128 |
| 11111110 | 254 | −2 |
| 11111111 | 255 | −1 |
Dengan n bit rentang bertanda adalah -2^n-1 sampai 2^n-1-1, sehingga 8 bit memuat −128 sampai 127 dan 32 bit memuat −2.147.483.648 sampai 2.147.483.647. Ada satu bilangan negatif lebih banyak daripada positif karena 0 memakai salah satu pola tidak negatif.
Mengapa skema ini. Gagasan yang lebih tua, seperti bit tanda tersendiri, memberi dua nol (+0 dan −0) dan memerlukan aturan khusus untuk penjumlahan. Dalam komplemen dua hanya ada satu nol, dan pengurangan adalah penjumlahan: 5+(-5)=00000101+11111011=100000000, dan bit kesembilan dibuang, menyisakan 0. Penjumlah perangkat keras tidak memerlukan logika tanda.
Overflow. Hasil yang tidak muat berputar kembali. Dalam 8 bit 127+1=01111111+00000001=10000000, yang terbaca −128. Bilangan bulat berukuran tetap di C dan Java berputar seperti ini (lihat bagian bilangan bulat dalam kode), sedangkan bilangan bulat Python membesar selama memori cukup, sehingga Python hanya memperlihatkan perputaran bila kamu menutup bitnya sendiri.
Coba tombol ×2, +1, dan NOT pada penyunting bit di atas untuk melihat perputarannya.
Coba: menegasikan bilangan
Tulis -5 dalam komplemen dua 8 bit.
Coba: membaca byte bertanda
Bilangan apa 11111110 dalam komplemen dua 8 bit?
- -2
- 254
- -126
- -1
Apa itu operator bitwise dan geseran?
Operator bitwise bekerja pada setiap bit sebuah bilangan secara terpisah: AND mempertahankan 1 hanya di tempat kedua bit 1, OR memberi 1 di tempat salah satu bit 1, XOR memberi 1 di tempat bitnya berbeda, dan NOT membalik setiap bit. Geseran menggeser semua bit ke kiri atau kanan.
| Bit | AND | OR | XOR |
|---|---|---|---|
| 0, 0 | 0 | 0 | 0 |
| 0, 1 | 0 | 1 | 1 |
| 1, 0 | 0 | 1 | 1 |
| 1, 1 | 1 | 1 | 0 |
Misalnya 1100_2 AND 1010_2 adalah 1000_2, sehingga 12 \& 10=8; OR memberi 1110_2=14 dan XOR memberi 0110_2=6.
Kegunaannya.
- Topeng (mask).
x & 0xFFmempertahankan byte terendah, danx & 1bernilai 1 tepat bila x ganjil. - Bendera (flag). Beberapa pengaturan ya-atau-tidak muat dalam satu bilangan, satu bit masing-masing: nyalakan bendera dengan OR, matikan dengan AND dan NOT, balik dengan XOR. Izin berkas Unix adalah tiga bendera seperti itu per kelompok.
- Geseran. Menggeser ke kiri sebanyak k mengalikan dengan 2^k dan menggeser ke kanan sebanyak k membagi dengan 2^k, membuang sisanya, yaitu penggandaan dan pembagian dua yang terlihat tadi. Bit yang melewati ujung hilang.
- Trik. x \& (x-1) bernilai 0 tepat bila x pangkat 2 (atau 0), dan x XOR x selalu 0.
Mencampur operator dengan aritmetika biasa memerlukan kehati-hatian soal urutan operasi, seperti pada bilangan negatif di artikel bilangan bulat: beri kurung pada ekspresi bitwise. Coba operatornya pada dua byte di bawah.
Interaktif: AND, OR, XOR, NOT, dan geseran
Terapkan operator bitwise pada dua byte dan lihat bit-bitnya sejajar, dengan hasil dalam biner dan desimal.
Coba: AND bitwise
Berapakah 12 \& 10 (AND bitwise)?
- 14
- 8
- 6
- 2
Bagaimana pecahan ditulis dalam biner?
Setelah koma biner, tempatnya bernilai \frac12,\frac14,\frac18,…, sehingga pecahan berakhir dalam biner hanya bila penyebutnya, dalam bentuk paling sederhana, adalah pangkat 2. Misalnya 0,101_2=\frac12+\frac18=\frac58=0,625.
Alasannya adalah aturan desimal yang diterapkan pada basis 2. Pecahan paling sederhana berakhir dalam basis b tepat bila setiap faktor prima penyebutnya membagi b: pada basis 10 bilangan prima 2 dan 5, seperti pada bagian pecahan ke desimal, dan pada basis 2 hanya bilangan prima 2. Jadi:
| Pecahan | Biner | Berakhir? |
|---|---|---|
| \frac12 | 0,1 | ya |
| \frac38 | 0,011 | ya |
| 5/4 | 1,01 | ya |
| \frac13 | 0,(01 repeating) | tidak: berulang |
| \frac110 | 0,0(0011 repeating) | tidak: berulang |
| \frac15 | 0,(0011 repeating) | tidak: berulang |
Untuk mencari angkanya, kalikan bagian pecahan dengan 2: bagian bulatnya adalah bit berikutnya, dan sisanya dilanjutkan. 0,1→0,2→0,4→0,8→1,6 memberi bit 0, 0, 0, 1 dan berlanjut dengan 0,6, 1,2, 0,4, sehingga blok 0011 berulang selamanya.
Mengapa ini penting bagi program. Bilangan floating point menyimpan sejumlah tetap bit signifikan, 53 pada format 64 bit yang umum (IEEE 754 binary64), sebagai tanda, eksponen, dan bagian pecahan. Jadi hanya pecahan berpenyebut pangkat 2, seperti 0,5, 0,25, 0,75, dan 0,125, yang disimpan dengan tepat. Bilangan seperti 0,1, 0,2, dan 0,3 terpotong di tengah blok yang berulang, dan nilai tersimpan terdekat dipakai sebagai gantinya. Itulah sebabnya 0.1 + 0.2 adalah 0.30000000000000004, seperti dijelaskan di artikel bilangan real. Obatnya adalah membandingkan dengan toleransi, atau menghitung dalam satuan utuh seperti sen.
Ketik bilangan apa pun di bawah dan lihat ekspansinya dalam biner, oktal, atau heksadesimal.
Interaktif: pecahan dalam biner
Tulis bilangan seperti 0,1 dalam biner, oktal, atau heksadesimal dan lihat apakah ia berakhir atau berulang, beserta perkalian bersusun yang memberi angkanya.
Coba: pecahan biner
Tentukan a.
Bagaimana mengolah bilangan biner di Python dan JavaScript?
Kedua bahasa menulis literal biner dengan 0b, mengubah dengan bin dan int(teks, 2) di Python atau toString(2) dan parseInt(teks, 2) di JavaScript, dan memakai operator bitwise yang sama &, |, ^, ~, <<, dan >>. Keduanya berbeda soal ukuran bilangan bulat: bilangan bulat Python tidak terbatas, sedangkan operator bitwise JavaScript diam-diam bekerja pada bilangan bulat bertanda 32 bit.
>>> bin(10), bin(255), hex(255), oct(64)
('0b1010', '0b11111111', '0xff', '0o100')
>>> int('1011010', 2), int('ff', 16), 0b1011010
(90, 255, 90)
>>> f'{90:08b}', f'{255:#x}', format(5, '04b') # padded binary, hex, width
('01011010', '0xff', '0101')
>>> (255).bit_length()
8
>>> 0b1100 & 0b1010, 0b1100 | 0b1010, 0b1100 ^ 0b1010
(8, 14, 6)
>>> 1 << 4, 100 >> 2 # times 16, divide by 4
(16, 25)
>>> ~5 # NOT: -x - 1
-6
>>> bin(-5) # a sign, not two's complement
'-0b101'
>>> (-5) & 0xFF # the low 8 bits of -5
251
>>> 2 ** 64 # no overflow
18446744073709551616
>>> (0.1).hex() # the stored binary value of 0.1
'0x1.999999999999ap-4'(10).toString(2) // '1010'
(255).toString(16) // 'ff'
parseInt('1011010', 2) // 90
0b1011010 // 90
5 & 3, 5 | 3, 5 ^ 3 // 1, 7, 6
~5 // -6
1 << 31 // -2147483648: bitwise operators use 32-bit signed integers
(1 << 31) >>> 0 // 2147483648: >>> reads the 32 bits as unsigned
-5 >>> 0 // 4294967291
(-5 >>> 0).toString(2) // '11111111111111111111111111111011': two's complement in 32 bits
2 ** 32 >> 0 // 0: the high bits are discarded
2n ** 64n // 18446744073709551616n (BigInt has no 32-bit limit)#include <iostream>
#include <cstdio>
using namespace std;
void printBinary(int n, int width) { // the lowest `width` bits, high bit first
for (int i = width - 1; i >= 0; i--) cout << ((n >> i) & 1);
cout << endl;
}
int parseBinary(const char* s) { // "1011010" -> 90
int value = 0;
for (int i = 0; s[i] != 0; i++) value = value * 2 + (s[i] - '0');
return value;
}
int main() {
printBinary(90, 8);
printBinary(255, 8);
printf("%x %o\n", 255, 64); // hexadecimal and octal
cout << parseBinary("1011010") << endl;
cout << (12 & 10) << " " << (12 | 10) << " " << (12 ^ 10) << endl; // AND, OR, XOR
cout << (1 << 4) << " " << (100 >> 2) << endl; // times 16, divide by 4
cout << ~5 << endl; // NOT: -x - 1
printBinary(-5, 8); // the low 8 bits of -5 (two's complement)
cout << ((-5) & 0xFF) << endl;
return 0;
}
/* output:
01011010
11111111
ff 100
90
8 14 6
16 25
-6
11111011
251
*/Jebakannya, berurutan dari yang paling sering menggigit:
| Jebakan | Yang terjadi | Yang sebaiknya dilakukan |
|---|---|---|
~5 | memberi −6, bukan −5 | NOT adalah −x − 1; negasikan dengan -x |
bin(-5) atau (-5).toString(2) | tanda minus dan bit-bit 5 | tutup dengan & 0xFF (Python) atau pakai >>> 0 (JavaScript) untuk melihat komplemen dua |
| Operator bitwise di JavaScript | bekerja pada 32 bit: 2 ** 32 >> 0 adalah 0 | pakai BigInt untuk nilai lebih besar |
1 << 31 di JavaScript | negatif | tambah >>> 0 bila ingin tanpa tanda |
| Banyak geseran terlalu besar | JavaScript memakai banyaknya modulo 32: 1 << 32 adalah 1 | jaga banyaknya di bawah lebar bit |
| Prioritas | x & 1 == 0 berarti x & (1 == 0) di banyak bahasa | beri kurung: (x & 1) == 0 |
| Pecahan biner | 0.1 + 0.2 != 0.3 | bandingkan dengan toleransi |
Pakai int(teks, 2) atau parseInt(teks, 2) untuk membaca biner yang diketik orang, dan format dengan f'{n:08b}' atau n.toString(2).padStart(8, '0') untuk merapikan bit-bitnya.
Dari mana asal biner?
Aritmetika biner jauh lebih tua daripada komputer: pemikir India, Mesir, dan Eropa memakainya jauh sebelum elektronik menjadikannya penting.
- Sekitar 200 SM. Pingala, dalam karya Sanskerta tentang matra puisi, menjelaskan pola suku kata pendek dan panjang yang setara dengan bilangan biner.
- Mesir. Papirus Rhind mengalikan dengan penggandaan dan penjumlahan berulang, yaitu perkalian dengan angka biner dari salah satu bilangan.
- 1703. Leibniz menerbitkan Explication de l'arithmétique binaire. Ia melihat pada heksagram I Ching, yaitu pola enam garis putus dan tak putus, bilangan 0 sampai 63 dalam biner.
- 1854. Laws of Thought karya George Boole menjadikan logika aljabar benar dan salah, 1 dan 0.
- 1937. Claude Shannon menunjukkan dalam tesis masternya bahwa saklar relai dapat melakukan logika Boole, penghubung antara aljabar dan rangkaian. Pada 1948 ia menjadikan kata bit, yang disarankan John Tukey, sebagai satuan informasi.
- 1963. ASCII memberi huruf dan simbol kode standar 7 bit.
Satu benang merah mengalir melalui semuanya: dua simbol cukup untuk menulis bilangan apa pun, dan setiap keputusan antara dua pilihan dapat dicatat sebagai satu bit.
Apa kesalahan umum pada bilangan biner?
Kesalahan paling umum pada bilangan biner adalah sembilan hal berikut, masing-masing dengan pernyataan yang benar dan bilangan yang menunjukkan alasannya.
| Kesalahan | Yang benar |
|---|---|
| ❌ 1+1=2 dalam biner | Tidak ada angka 2 dalam biner: 1+1=10_2. |
| ❌ 10_2 adalah sepuluh | 10_2 adalah dua; sepuluh adalah 1010_2. |
| ❌ Satu byte adalah 4 bit | Satu byte adalah 8 bit; 4 bit adalah satu nibble. |
| ❌ Satu byte memuat 255 nilai | Ia memuat 256 nilai, 0 sampai 255. |
❌ ~5 adalah −5 | ~5=-6: NOT adalah -x-1. |
| ❌ Biner tidak dapat menunjukkan bilangan negatif | Komplemen dua dapat: 11111011_2=-5 dalam 8 bit. |
| ❌ 11111111_2 selalu 255 | Tanpa tanda ia 255; sebagai 8 bit bertanda ia −1. |
| ❌ 1 KB selalu 1024 byte | kB adalah 1000 byte; KiB adalah 1024 byte. |
| ❌ 0,1 disimpan dengan tepat dalam biner | 0,1=0,0(0011 repeating)_2 berulang, sehingga float hanya menyimpan nilai terdekat. |
Latihan: uji pemahamanmu
Soal-soal ini mencampur semua yang dibahas di atas. Jika jawabanmu belum tepat, perhatikan petunjuk yang tersedia, lalu coba kembali.
Benar atau salah?
Tentukan tiap pernyataan Benar atau Salah.
- 1+1=10 dalam biner.
- 1000_2 adalah delapan.
- Satu byte dapat memuat 255 nilai berbeda.
- Dalam komplemen dua 8 bit, 11111111 adalah 255.
- 0,1 dapat ditulis tepat dengan angka biner yang berhingga banyaknya.
Pilih semua yang benar
Pilih semua bilangan yang sama dengan dua belas.
- 1100_2
- 14_8
- C_16
- 1010_2
- 20_8
Bawaan yang merambat
Jumlahkan.
Heksadesimal ke desimal
Ubah ke desimal.
Minus satu
Pola 8 bit mana yang merupakan -1 dalam komplemen dua?
- 10000001
- 10000000
- 01111111
- 11111111
Uji ganjil
Ekspresi mana yang benar tepat bila x ganjil?
- x \& 2=1
- x≫1=1
- x \& 1=1
- x⊕ x=1
Ringkasan: bilangan biner sekilas
- Biner: basis 2, angka 0 dan 1 (bit), tempat bernilai 1,2,4,8,…; 1011_2=11.
- Mengubah: jumlahkan pangkat 2 di bawah angka 1; bagi 2 dan baca sisanya ke atas; empat bit membentuk satu angka heksadesimal, tiga bit satu angka oktal.
- Aritmetika: 1+1=10 dengan bawaan; kalikan dengan menggeser dan menjumlahkan; menambah 0 menggandakan.
- Ukuran: n bit memuat 2^n nilai, satu byte 8 bit (256 nilai); KiB adalah 1024 byte, kB adalah 1000.
- Negatif: komplemen dua, bit teratas bernilai -2^n-1; negasikan dengan membalik dan menambah 1; overflow berputar.
- Bitwise: AND menutup, OR menyalakan, XOR membalik; x≪ k adalah x·2^k; x \& 1 menguji ganjil.
- Pecahan: tempat \frac12,\frac14,…; berakhir hanya untuk penyebut pangkat 2, sehingga 0,1 berulang dan float menghampirinya.
- Kode:
bin,int(s, 2),toString(2); operator bitwise JavaScript 32 bit;~xadalah-x - 1.
Glosarium: istilah penting
- Bit
- Angka biner, 0 atau 1, satuan informasi terkecil; kata itu singkatan dari binary digit.
- Byte
- Sekelompok 8 bit, yang dapat memuat 256 nilai berbeda, 0 sampai 255 bila dibaca tanpa tanda.
- Bilangan biner
- Bilangan yang ditulis dalam basis 2 dengan hanya angka 0 dan 1, tiap tempat bernilai pangkat 2.
- Nilai tempat
- Prinsip bahwa sebuah angka bernilai nilai tampaknya dikali pangkat basis untuk tempat ia berada.
- Heksadesimal
- Basis 16, dengan angka 0 sampai 9 dan A sampai F; satu angka heksadesimal tepat empat bit, sehingga satu byte adalah dua angka heksadesimal.
- Oktal
- Basis 8, dengan angka 0 sampai 7; satu angka oktal tepat tiga bit.
- Nibble
- Sekelompok empat bit, yaitu satu angka heksadesimal.
- Bit paling bermakna
- Bit paling kiri sebuah bilangan biner, yang ada di tempat tertinggi; dalam komplemen dua ia adalah bit tanda.
- Komplemen dua
- Cara umum menyimpan bilangan bulat negatif, tempat bit paling kiri bernilai minus 2 pangkat n dikurangi 1 dan sebuah bilangan dinegasikan dengan membalik bitnya dan menambah 1.
- Overflow
- Perputaran yang terjadi ketika hasil tidak muat dalam banyak bit yang tetap, seperti 127 ditambah 1 menjadi minus 128 dalam 8 bit.
- Operator bitwise
- Operator seperti AND, OR, XOR, atau NOT yang bekerja pada setiap bit operannya secara terpisah.
- Geseran bit
- Operasi yang menggeser semua bit ke kiri atau kanan; menggeser ke kiri sebanyak k mengalikan dengan 2 pangkat k.
- Topeng bit
- Bilangan yang bit 1-nya memilih bit mana dari bilangan lain yang dipertahankan, diubah, atau diuji, dipakai dengan AND, OR, dan XOR.
- Kibibyte
- Satuan biner yang sama dengan 1024 byte, ditulis KiB, untuk membedakannya dari kilobita sebesar 1000 byte.
- ASCII
- Standar 1963 yang memberi huruf Inggris, angka, tanda baca, dan karakter kendali kode 0 sampai 127.
- Bilangan floating point
- Bilangan yang disimpan sebagai tanda, eksponen, dan sejumlah tetap bit signifikan, sehingga sebagian besar pecahan hanya disimpan secara hampiran.
Pertanyaan yang sering diajukan
Apa itu bilangan biner?
Bilangan biner adalah bilangan yang ditulis dalam basis 2, hanya memakai angka 0 dan 1. Tiap tempat bernilai dua kali tempat di kanannya, sehingga 1011 dalam biner adalah 8 ditambah 2 ditambah 1, yaitu 11. Tiap angka disebut bit.
Mengapa komputer memakai biner?
Komponen elektronik seperti transistor punya dua keadaan yang andal, menyala dan mati, dan dua keadaan mudah dibedakan bahkan dengan derau. Mesin karena itu dapat menyalin dan mengolah sinyal biner tanpa galat. Setiap bilangan, huruf, dan gambar lebih dulu diubah menjadi bit.
Bagaimana mengubah biner ke desimal?
Tulis nilai tempat 1, 2, 4, 8 dan seterusnya dari kanan, lalu jumlahkan yang berada di bawah angka 1. Untuk 1011010 itu adalah 64, 16, 8, dan 2, yang berjumlah 90. Setiap tempat adalah pangkat 2.
Bagaimana mengubah desimal ke biner?
Bagi bilangan itu dengan 2 berulang kali, menulis tiap sisa, sampai hasil baginya 0. Lalu baca sisanya dari yang terakhir ke yang pertama. Untuk 45 sisa yang dibaca ke atas adalah 101101, dan 32 ditambah 8 ditambah 4 ditambah 1 adalah 45.
Apa itu heksadesimal dan mengapa dipakai?
Heksadesimal adalah basis 16, dengan angka 0 sampai 9 dan A sampai F. Satu angka heksadesimal tepat empat bit, sehingga satu byte adalah dua angka heksadesimal dan untai biner yang panjang menjadi pendek. Warna web seperti FF8800 dan alamat memori ditulis dalam heksadesimal.
Apa beda bit dan byte?
Bit adalah satu angka biner, 0 atau 1. Byte adalah sekelompok 8 bit, yang dapat memuat 256 nilai berbeda dari 0 sampai 255. Empat bit disebut nibble, dan satu angka heksadesimal adalah satu nibble.
Berapa nilai yang dapat disimpan n bit?
Tepat 2 pangkat n, karena tiap bit tambahan menggandakan banyak pola. Sebagai bilangan tanpa tanda, nilainya berjalan dari 0 sampai 2 pangkat n dikurangi 1. Jadi 8 bit menyimpan 256 nilai, 16 bit menyimpan 65.536, dan 32 bit menyimpan sekitar 4,3 miliar.
Bagaimana bilangan negatif disimpan dalam biner?
Hampir semua komputer memakai komplemen dua. Bit paling kiri bernilai minus 2 pangkat n dikurangi 1, sehingga dalam 8 bit 10000000 adalah minus 128 dan 11111111 adalah minus 1. Untuk menegasikan bilangan, balik setiap bit dan tambah 1, yang membuat pengurangan menjadi penjumlahan biasa.
Apa itu overflow bilangan bulat?
Itu yang terjadi ketika hasil tidak muat dalam banyak bit yang tetap. Nilainya berputar: dalam aritmetika bertanda 8 bit 127 ditambah 1 menghasilkan minus 128. Di C dan Java ini bahaya nyata, sedangkan bilangan bulat Python membesar selama memori cukup.
Berapa 1 ditambah 1 dalam biner?
Hasilnya 10 dalam biner, yang dibaca satu-nol dan berarti dua. Tidak ada angka 2 dalam basis 2, sehingga jumlahnya ditulis 0 dengan bawaan 1 ke tempat berikutnya, seperti 5 ditambah 5 ditulis 0 dengan bawaan dalam desimal.
Apa yang dilakukan AND, OR, dan XOR pada bit?
Ketiganya menggabungkan dua bilangan bit demi bit. AND memberi 1 hanya di tempat kedua bit 1, OR memberi 1 di tempat sekurangnya satu bit 1, dan XOR memberi 1 di tempat bitnya berbeda. NOT membalik setiap bit. Dipakai untuk topeng, bendera, dan uji cepat seperti apakah bilangan ganjil.
Apa yang dilakukan menggeser bit?
Menggeser ke kiri sebanyak k tempat mengalikan bilangan dengan 2 pangkat k, dan menggeser ke kanan sebanyak k tempat membagi dengan 2 pangkat k dan membuang sisanya. Cara kerjanya seperti menambah atau menghapus nol dalam desimal. Bit yang melewati ujung bilangan hilang.
Mengapa 0,1 tidak disimpan dengan tepat dalam biner?
Pecahan berakhir dalam biner hanya bila penyebutnya pangkat 2. Sepersepuluh punya faktor 5, sehingga ekspansi binernya 0,000110011 dan seterusnya berulang selamanya. Float hanya menyimpan 53 bit signifikan, sehingga menyimpan nilai terdekat, dan 0,1 ditambah 0,2 sedikit lebih dari 0,3.
Bagaimana memakai biner di Python?
Tulis literal dengan awalan 0b, ubah bilangan dengan bin, hex, dan format, dan baca teks dengan int dan basis seperti 2. Operatornya adalah ampersand, garis tegak, tanda sisipan, tilde, dan dua geseran. Bilangan bulat Python tidak punya ukuran tetap, sehingga tilde dari 5 adalah minus 6.
Referensi
- James Stewart, Lothar Redlin and Saleem Watson (2016). Precalculus: Mathematics for Calculus (7th ed.). Cengage Learning.
- Donald E. Knuth (1997). The Art of Computer Programming, volume 2: Seminumerical Algorithms (3rd ed.), section 4.1 (positional number systems). Addison-Wesley.
- Gottfried Wilhelm Leibniz (1703). Explication de l’arithmétique binaire. Mémoires de l’Académie royale des sciences.
- George Boole (1854). An Investigation of the Laws of Thought.
- Claude E. Shannon (1938). A Symbolic Analysis of Relay and Switching Circuits. Transactions of the American Institute of Electrical Engineers 57, 713–723.
- IEEE (2019). IEEE Standard for Floating-Point Arithmetic (IEEE 754-2019). Institute of Electrical and Electronics Engineers.
- International Electrotechnical Commission (2008). IEC 80000-13:2008, Quantities and units, Part 13: Information science and technology (binary prefixes kibi, mebi, gibi).
- Python Software Foundation. The Python Standard Library: bitwise operations on integer types. docs.python.org. https://docs.python.org/3/library/stdtypes.html#bitwise-operations-on-integer-types.
Artikel terkait
- Bilangan Bulat: Operasi, Faktor Prima, FPB, dan KPK: Bilangan bulat: garis bilangan, operasi pada bilangan negatif, aturan habis dibagi, bilangan prima, FPB dan KPK, serta sisa pembagian, lengkap dengan latihan.
- Bilangan Rasional: Pecahan, Operasi, Desimal, dan Persen: Bilangan rasional: pecahan, pecahan senilai, membandingkan, empat operasi, bilangan campuran, desimal, dan persen, lengkap dengan contoh dan latihan.
- Bilangan Real: Pengertian, Jenis, Contoh, dan Sifat-sifatnya: Pengertian bilangan real, jenis (rasional dan irasional), contoh, sifat, dan garis bilangan, lengkap dengan latihan interaktif, pembuktian, dan FAQ.
- Eksponen dan Akar: Sifat Bilangan Berpangkat dan Bentuk Akar: Eksponen dan akar: lima sifat bilangan berpangkat, pangkat nol, negatif, dan pecahan, bentuk akar, merasionalkan penyebut, dan notasi ilmiah, dengan latihan.