Untuk menukar antara perduaan (binary) dan denari (denary), gunakan nilai tempat: dalam nombor 8 bit, lajur dari kiri ke kanan bernilai 128, 64, 32, 16, 8, 4, 2 dan 1. Perduaan kepada denari bermaksud menambah lajur yang mengandungi 1. Denari kepada perduaan bermaksud memutuskan, lajur demi lajur, sama ada nilai tempat itu muat.
Kemahiran ini ialah permulaan modul Perwakilan nombor dan teks, dan digunakan semula dalam heksadesimal, penambahan perduaan dan kedalaman bit.
Bagaimanakah nilai tempat berfungsi dalam perduaan?
Dalam denari, nombor 345 bermaksud 3 ratus, 4 puluh dan 5 sa. Setiap lajur ialah 10 kali lajur di sebelah kanannya. Dalam perduaan setiap lajur ialah 2 kali lajur di sebelah kanannya, jadi lajurnya ialah 1, 2, 4, 8, 16, 32, 64, 128 dibaca dari kanan.
| Nilai lajur | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
|---|---|---|---|---|---|---|---|---|
| Bit | 1 | 0 | 1 | 1 | 0 | 1 | 0 | 1 |
Tambah nilai di atas setiap 1: 128 + 32 + 16 + 4 + 1 = 181. Jadi 10110101 dalam perduaan ialah 181 dalam denari.
Bagaimanakah menukar denari kepada perduaan?
Bekerja dari lajur terbesar ke terkecil. Pada setiap lajur tanya: adakah nilai ini muat dalam baki?
- Tulis lapan nilai lajur di atas lapan kotak kosong.
- Jika nilai tempat kurang daripada atau sama dengan baki nombor, tulis 1 dan tolak.
- Jika tidak, tulis 0 dan biarkan nombor tidak berubah.
- Teruskan hingga lajur terakhir. Baki sepatutnya 0, iaitu semakan anda.
Contoh berlangkah
Tukar 183 kepada perduaan 8 bit.
| Lajur | Baki sebelum | Muat? | Bit | Baki selepas |
|---|---|---|---|---|
| 128 | 183 | ya | 1 | 55 |
| 64 | 55 | tidak | 0 | 55 |
| 32 | 55 | ya | 1 | 23 |
| 16 | 23 | ya | 1 | 7 |
| 8 | 7 | tidak | 0 | 7 |
| 4 | 7 | ya | 1 | 3 |
| 2 | 3 | ya | 1 | 1 |
| 1 | 1 | ya | 1 | 0 |
Jawapannya 10110111. Semak dengan menambah semula: 128 + 32 + 16 + 4 + 2 + 1 = 183. Ia sepadan, dan baki berakhir pada 0.
Bagaimanakah kaedah yang sama ditulis sebagai algoritma?
Jadual di atas ialah apa yang dilakukan pseudokod ini.
DECLARE Number : INTEGER
DECLARE Place : INTEGER
DECLARE Bits : STRING
Number ← 183
Place ← 128
Bits ← ""
WHILE Place >= 1
IF Number >= Place
THEN
Bits ← Bits & "1"
Number ← Number - Place
ELSE
Bits ← Bits & "0"
ENDIF
Place ← Place DIV 2
ENDWHILE
OUTPUT Bits
Jejakkannya:
| Place | Number >= Place? | Bits | Number |
|---|---|---|---|
| 128 | ya | “1” | 55 |
| 64 | tidak | “10” | 55 |
| 32 | ya | “101” | 23 |
| 16 | ya | “1011” | 7 |
| 8 | tidak | “10110” | 7 |
| 4 | ya | “101101” | 3 |
| 2 | ya | “1011011” | 1 |
| 1 | ya | “10110111” | 0 |
Selepas Place = 1, Place menjadi 0 dan gelung berhenti. Outputnya ialah 10110111. Anda boleh mengesahkan dalam kotak pasir penaakulan Python dengan print(format(183, "08b")) dan print(int("10110111", 2)).
Kesilapan yang perlu diawasi
Kesilapan lazim ialah membaca nilai tempat dari hujung yang salah, sehingga bit paling kiri dianggap bernilai 1.
Soalan: Tukar 110100 kepada denari.
Kerja yang salah: 1×1 + 1×2 + 0×4 + 1×8 + 0×16 + 0×32 = 11
Lajur bagi nombor 6 bit ialah 32, 16, 8, 4, 2, 1 dari kiri. Kerja yang betul ialah 32 + 16 + 4 = 52. Untuk mengelakkan kesilapan ini, tulis nilai lajur di atas bit sebelum menambah apa-apa, sentiasa bermula dengan 1 di kanan dan menggandakan ke kiri.
Semak diri anda
1. Tukar 00110110 kepada denari.
Lihat jawapan
Lajur yang ada 1: 32, 16, 4, 2. Jumlah: 32 + 16 + 4 + 2 = 54.
2. Tukar 200 kepada perduaan 8 bit.
Lihat jawapan
128 muat (baki 72). 64 muat (baki 8). 32 tidak, 16 tidak. 8 muat (baki 0). 4, 2, 1 tidak. Bit: 1 1 0 0 1 0 0 0, jadi 11001000. Semak: 128 + 64 + 8 = 200.
3. Mengapakah daftar 8 bit tidak dapat menyimpan nombor denari 256?
Lihat jawapan
Nilai 8 bit terbesar ialah 11111111 = 255. Nombor 256 memerlukan lajur kesembilan bernilai 256, jadi ia memerlukan 9 bit.
Langkah seterusnya
Apabila penukaran sudah pantas, pelajari menggunakan heksadesimal sebagai cara padat menulis perduaan, kemudian cuba set latihan campuran. Kotak pasir penaakulan Python dan pelatih jejak pseudokod membolehkan anda menguji contoh sendiri.
Ada pelajar boleh menukar dengan betul tetapi perlahan, lalu kehabisan masa dalam kertas peperiksaan. Guru kami boleh melatih kelajuan itu dalam tuisyen Sains Komputer dalam talian satu dengan satu.