Apakah kekuatan dua bit per kata “nyaman”? Jika ya, mengapa demikian?

11

Saya menemukan beberapa sumber mengklaim bahwa kekuatan dua bit dalam kata biner (seperti 8-bit per byte) adalah "hal yang baik" atau "nyaman". Saya menemukan tidak ada sumber yang menunjukkan mengapa.

Dari Apa sejarah mengapa byte delapan bit? kami membaca dalam jawaban yang disetujui:

Komputer biner memotivasi desainer untuk membuat kekuatan ukuran dua.

Ok, tapi kenapa? Dalam pertanyaan yang sama tetapi di bidang komentar untuk pertanyaan saya menemukan:

Apakah kalimat terakhir bercanda? Byte 12-bit akan merepotkan karena itu bukan kekuatan 2. - robjb

Sekali lagi, batal demi alasan ...

perhitungan alamat adalah hal yang jauh lebih sederhana dengan kekuatan 2, dan itu diperhitungkan ketika Anda membuat logika dari transistor mentah dalam kaleng kecil - Mike

Karena byte adalah unit terkecil yang dapat dialamatkan, ini tidak masuk akal. Tapi banyak komentar yang tidak menyenangkan. Mungkin saya melewatkan sesuatu.

Dari Wikipedia :

Standar de facto delapan bit adalah kekuatan yang nyaman dari dua yang memungkinkan nilai 0 hingga 255 untuk satu byte

Dan ini akan nyaman karena ...?

Untuk klarifikasi, ini tentang jumlah bit per byte (misalnya 8 atau 6, dll), bukan jumlah nilai per byte (misalnya 2 8 atau 2 6 , dll). Karena kebingungan saya juga menunjukkan ini bukan tentang ukuran Word.

Saya tidak terlalu tertarik pada alasan sejarah. Itu telah dijelaskan dengan baik di tempat lain (lihat tautan).


Pertanyaan terkait tentang SO: /programming/1606827/why-is-number-of-bits-always-a-power-of-two

Andreas
sumber
2
@gnat Saya cukup yakin kita sedang berbicara tentang jumlah bit per byte (yaitu 8 dalam 8 bit byte) di sini, bukan jumlah nilai yang dapat mewakili suatu byte (yaitu 2 ^ 8 dalam 8 bit byte). Jadi, jika Anda memiliki, misalnya, byte 6 bit, 6 bukan kekuatan dua , tetapi ya, byte 6 bit dapat mewakili kekuatan dua angka nilai.
8bittree
2
@ 8bittree, saya rasa saya mengerti, terima kasih sudah menjelaskan! (ditarik duplikat suara - meskipun saya pikir akan lebih mudah bagi pembaca jika penjelasan seperti dalam komentar terakhir Anda akan mengedit ed mempertanyakan, hal ini tampaknya agak halus)
nyamuk
2
Pertanyaan serupa tentang SO: stackoverflow.com/q/1606827/3723423 - jawabannya membawa beberapa argumen yang masuk akal tentang kenyamanan
Christophe
2
@Snowman: Posting OP berisi fallacy "mengemis pertanyaan": "Mengapa kekuatan dua ukuran byte dianggap nyaman?" Mereka bukan. Itu tidak ada hubungannya dengan kekuatan dua; dia salah membaca kalimat di artikel Wikipedia.
Robert Harvey
3
@RobertHarvey Dalam jawaban untuk "Apa sejarah mengapa byte delapan bit?" (juga ditautkan dalam pertanyaan saya) ada kalimat berikut: "Komputer biner memotivasi desainer untuk membuat kekuatan dua ukuran." Apakah saya salah membaca ini juga? Apa arti kedua sumber menurut Anda? Hanya mengatakan "Anda salah" tidak benar-benar melakukannya untuk saya.
Andreas

Jawaban:

10

Saya tidak berpikir byte 8-bit telah berhasil karena mereka memiliki lebar yang merupakan kekuatan dua. Jika Anda tidak ingin menangani bit satu per satu - dan itu adalah fitur yang umum baik sekarang maupun di masa lalu - memiliki kekuatan dua tidak penting secara praktis (hanya saja - sekarang jauh lebih banyak daripada di masa lalu ketika menghemat beberapa komponen diskrit penting - sebuah refleks untuk insinyur perangkat keras dan perangkat lunak dan tinggal di tanah yang akrab adalah penting untuk tujuan lain), dan saya tidak ingat pernah melihat yang disebutkan dalam sejarah pembacaan komputer saya (1). Satu membutuhkan huruf kecil, itu berarti sesuatu yang lebih dari set karakter 6-bit yang dominan. ASCII adalah 7-bit, tetapi ASCII kemudian murni untuk pertukaran antar (dan dengan demikian diterjemahkan ke kode internal untuk penanganan), dan dengan demikian

Subcommmitee mengakui bahwa produsen komputer tidak mungkin merancang komputer yang menggunakan kode 7-bit secara internal. Mereka lebih cenderung menggunakan kode 4-bit, 6-bit, dan 8-bit. Tidak ada kebutuhan luas saat ini untuk pertukaran lebih dari 128 karakter yang terpisah dan berbeda antara komputer, dan antara komputer dan peralatan input / output yang terkait. [pita kertas, yang memiliki ukuran bingkai alami 8 bit tetapi membutuhkan paritas sehingga muatan frame adalah 7 bit juga dikutip mendukung 7-bit char untuk ASCII, kekuatan dua tidak dikutip di antara kelebihan 8 bit ] (2)

dan untuk perangkat keras 8-bit byte dimenangkan karena diperbolehkan untuk mengemas 2 angka desimal dalam satu byte pada saat 75% dari data numerik dan diwakili dalam BCD (3).

(1) misalnya Blaauw dan Brooks, Arsitektur Komputer ; MacKenzie, Set Karakter Kode, Sejarah dan Pengembangan memiliki kedua diskusi tentang subjek itu.

(3) Dokumen X3.2 - Subkomite yang bertanggung jawab atas ASCII - dikutip oleh MacKenzie.

(3) MacKenzie, lagi.

Pemrogram
sumber
1
Terima kasih. Jawaban Anda tepat dan Anda membawa referensi. Anda memiliki suara saya. Namun saya sadar jika apa yang Anda katakan itu benar, itu juga tidak mungkin untuk dibuktikan. Tidak dapat membuktikan tidak adanya sesuatu. Saya kira saya harus benar-benar menginterogasi yang mengklaim "kenyamanan" dan memeriksa sumbernya. Mungkin itu hanya rumor yang menyebar luas.
Andreas
Faktor kenyamanan lainnya adalah bahwa byte dapat direpresentasikan dengan mudah sebagai dua nilai heksidimal. Menempatkan dua desimal kode biner (BCD) dalam satu byte lebih sering disebut desimal paket. Ini memang dianggap nyaman karena desimal dapat dibaca sebagai desimal ketika data ditampilkan dalam hex.
JimmyJames
12 bit byte dapat direpresentasikan dengan mudah sebagai tiga nilai heksadesimal. Dan Anda dapat menyimpan tiga nomor BCD dalam 12 bit byte. Tentunya itu jauh lebih baik daripada dua nilai heksadesimal dan dua angka BCD. Sebenarnya, byte 10 bit dapat berisi tiga angka desimal. Dan saya pikir itulah cara standar floating point desimal IEEE bekerja.
gnasher729
1
@ JimmyJames, saya pikir Anda mendapatkan kausalitas terbalik dengan heksadesimal. Heksadesimal menjadi populer karena merupakan cara yang ringkas untuk merepresentasikan byte 8-bit, sebelumnya oktal jauh lebih populer (dan itu lebih populer pada mesin seperti PDP-11 yang memiliki byte 8-bit tetapi di mana bidang 3-bit signifikan dalam pengkodean set instruksi).
Pemrogram
@ gnasher729, byte 8-bit adalah anak dari 60-an. Pergi dari char 6-bit ke char 12-bit tidak terpikirkan di tahun 60-an. Bahkan hari ini ketika kita jauh lebih terbatas, UTF-8 populer karena UTF-16 dianggap terlalu boros. Sebuah byte 10-bit hampir tidak terpikirkan dan 10 bit per 3 digit desimal encoding juga sama sekali tidak taktis ketika Anda memeriksa nilai-nilai dalam register dan dalam memori dengan panel depan tanpa berbicara tentang dampak pada implementasi dengan teknologi saat itu.
Pemrogram
2

Selain kecelakaan historis, tidak ada alasan khusus mengapa kita harus menggunakan 8/16/32/64 bit. Saya kira 12/24/48/96 bit akan sangat berguna.

Untuk menangani teks, Unicode menggunakan UTF-24 hipotetis akan lebih murah daripada UTF32; hipotetis UTF-12 akan menyimpan semua karakter UTF-8 byte tunggal dan ganda dalam 12 bit, dan semua karakter UTF-8 triple dan quad byte dalam 24 bit (kisaran akan sedikit dikurangi menjadi 2 ^ 20 karakter, tapi itu masih empat kali lebih dari yang digunakan dengan murah hati); kode akan lebih sederhana karena hanya ada dua varian.

Untuk floating point, 48 bit biasanya cukup. 96 bit jauh lebih baik daripada 80 bit diperpanjang. 24 bit berguna untuk grafik; jauh lebih bermanfaat daripada 16 bit yang didukung oleh beberapa kartu grafis. Pointer 48 bit dapat menangani 256 terabyte.

Satu-satunya kelemahan adalah bit array, di mana divisi dengan 12 perlu menghitung posisi byte. Jika itu dianggap penting, saya yakin divisi dengan 12 dapat diimplementasikan dengan cukup efisien dalam perangkat keras.

gnasher729
sumber
Poin menarik tentang UTF, meskipun sedikit di luar topik. Ukuran byte floating point (atau bit) adalah pertempuran tanpa akhir antara memori dan presisi di mana Anda hanya perlu hidup dengan satu atau yang lain. Poin bagus tentang bit array juga.
Andreas
1
Pikiran yang menarik, tetapi saya tidak yakin ini menjawab pertanyaan.
1
Pertanyaannya adalah: "Mengapa delapan bit dianggap nyaman". Tentunya mengatakan "tidak" menjawab pertanyaan.
gnasher729
1
@ gnasher729 Pertanyaannya adalah: "Mengapa kekuatan dua bit per byte dianggap nyaman", meskipun jawaban Anda tampaknya berlaku juga.
8bittree
2
Komentar bukan untuk diskusi panjang; percakapan ini telah dipindahkan ke obrolan .
yannis
2

Ini nyaman karena arsitektur perangkat keras umum menggunakan kelipatan 8, misalnya arsitektur 32-bit dan 64-bit. Ini berarti efisiensi yang lebih besar ketika menggunakan penyimpanan dan transmisi data 8-bit.

"Namun, pertimbangan ekonomi dalam desain sangat mendorong untuk satu ukuran, atau sangat sedikit ukuran yang terkait dengan kelipatan atau pecahan (submultiples) ke ukuran primer. Ukuran yang disukai menjadi ukuran kata dari arsitektur."

Word (arsitektur komputer)

Lihat juga: Apa sejarah mengapa byte delapan bit?

Brad Thomas
sumber
5
Saya tidak akan menerima ini sebagai jawaban. Pertanyaan saya adalah mengapa power-of-two nyaman, bukan mengapa standar de facto adalah 8-bit. Dan sejarah di balik 8-bit menyebutkan 5, 6 dan 7 bit digunakan untuk alasan nyata, sementara pergi dari 7 ke 8 dimotivasi dengan "meh, mengapa tidak". Saya merasa membaca berbagai sumber kekuatan dua memiliki lebih dari itu kompatibilitas dengan sistem saat ini. (Pada kenyataannya 8-bit memberikan paritas set karakter 7-bit.) Kata adalah hal yang berbeda di mana saya mendapatkan manfaat dari kekuatan dua ukuran, yaitu shift dapat digunakan sebagai pengganti mult dalam perhitungan.
Andreas
3
@ RobertTarvey Pertanyaan ini bukan tentang jumlah status per switch (yaitu biner vs trinary atau lebih), ini tentang berapa banyak switch untuk dikelompokkan bersama. Lihat edit saya untuk pertanyaan.
8bittree
2
Mengenai hasil edit Anda, tidak ada perbedaan yang berarti antara jumlah bit per byte dan jumlah nilai per byte. Ada dua cara untuk mengekspresikan hal yang sama. Jumlah nilai yang bisa ditampung oleh byte mengikuti langsung dari jumlah bit yang dikandungnya: satu byte memiliki 8 bit, dan sehingga dapat menyimpan nilai hingga 2⁸-1.
Robert Harvey
2
Secara logis, ini berarti bahwa Anda memilih ukuran untuk byte yang dapat menampung rentang numerik yang nyaman. ASCII adalah 7 bit karena itu memberikan 128 nilai yang berbeda, cukup untuk menyandikan kedua huruf alfabet Romawi, karakter numerik, tanda baca, karakter kontrol, dan beberapa karakter khusus. Satu byte dapat menampung 7 bit ASCII dan satu bit paritas untuk pengecekan kesalahan, dengan total 8 bit, cocok untuk teletype. Kami telah menggunakan ukuran itu untuk satu byte sejak saat itu.
Robert Harvey
2
@JeremyKato Perangkat yang saya sebutkan lebih tua (era 60-an-80-an, untuk sebagian besar), yang mungkin mengapa Anda tidak terbiasa dengan mereka. ASCII, sebenarnya adalah encoding 7 bit (paritas bukan bagian dari standar). Tetapi untuk bagian utama dari komentar Anda, tidak, saya tidak melewatkan apa pun. Saya mengerti ada alasan mengapa 8 bit secara khusus nyaman, apa yang Anda dan Robert Harvey hilang adalah bahwa pertanyaannya adalah bertanya tentang kekuatan 2 bit secara umum , tidak secara khusus 8 bit.
8bittree
1

Menurut artikel Wikipedia untuk kata , ini membuat perhitungan yang terkait dengan pengalamatan memori secara signifikan lebih mudah:

Jumlah memori yang berbeda digunakan untuk menyimpan nilai data dengan tingkat presisi yang berbeda. Ukuran yang biasa digunakan biasanya kekuatan dua kelipatan dari unit resolusi alamat (byte atau kata). Mengubah indeks suatu item dalam array ke dalam alamat item kemudian hanya membutuhkan operasi shift daripada perkalian. Dalam beberapa kasus hubungan ini juga dapat menghindari penggunaan operasi divisi. Akibatnya, sebagian besar desain komputer modern memiliki ukuran kata (dan ukuran operan lainnya) yang memiliki kekuatan dua kali ukuran byte.

vartec
sumber
2
Ya, kekuatan dua kali ukuran byte. Tidak ada alasan yang melekat mengapa byte seharusnya delapan bit dan bukan sembilan, dua belas atau lima belas.
gnasher729
@ gnasher729, lebih mudah untuk dibagi dengan 8 (atau 16 atau 32 atau 64) dibandingkan dengan untuk membagi dengan 9 atau 12 atau 15.
robert bristow-johnson
@ gnasher729 jika kata adalah power-of-2 bits, dan power-of-2 byte, ini menyiratkan bahwa byte harus memiliki kekuatan-of-2 bit
vartec
@vartec Artikel dan kutipan mengatakan "Ukuran yang umum digunakan biasanya adalah kekuatan dua kelipatan satuan resolusi alamat (byte atau kata)" dan "sebagian besar desain komputer modern memiliki ukuran kata (dan ukuran operan lainnya) yang merupakan kekuatan dua kali ukuran byte. " Saya membaca "ukuran kata" diukur dalam byte, bukan bit. Tidak ada aturan tentang ukuran kata dalam bit atau harusnya kekuatan-of-2 dalam artikel.
Andreas
@artec: JIKA. Jelas tidak ada yang akan membangun mesin dengan 32 bit kata dan 12 bit byte. Tetapi tidak ada yang berbicara melawan mesin dengan 48 atau 96 bit kata dan 12 bit byte. Dan ada mesin di mana sebuah kata sepuluh byte.
gnasher729
0

Ini terkait erat dengan ruang alamat. Dengan menambahkan satu bit lagi ke bus alamat Anda, Anda dapat alamat dua kali lebih banyak lokasi memori. Jadi, ketika Anda menambahkan baris tambahan itu, Anda mungkin menggunakannya secara maksimal.

Ini mengarah pada perkembangan alami 1, 2, 4, 8, 16, 32 dan lain-lain.

Pada tingkat teknis produksi, juga mudah untuk mengulangi pola litograf yang sama. Yaitu, untuk menggandakannya. Jika Anda memulai dengan satu kait dan kemudian menggandakan polanya, Anda akan melewati 8, bukan 6, 10 atau 12.

Martin Maat
sumber
1
Bagaimana itu terkait dengan jumlah bit dalam satu byte? Apakah Anda serius mengklaim bahwa logika 32 bit DAN lebih mudah diterapkan daripada 36 atau 28 bit?
gnasher729
1
Saya tidak mengajukan klaim semacam itu. Saran saya adalah ini berasal dari desain sebelumnya yang semakin diperluas dalam lebar saat transistor semakin murah dan IC diperbolehkan untuk sirkuit yang lebih kecil.
Martin Maat
1
Teori menarik tentang tingkat teknis produksi. Kamu pasti sedang mengerjakan sesuatu. Bisakah Anda memperpanjang paragraf atau memberikan tautan yang menjelaskan dasar-dasarnya?
Andreas
1
Ini omong kosong. Misalnya, dalam kartu grafis di mana semua jenis ukuran bit ganjil dibutuhkan di berbagai tempat, semuanya dilakukan persis dengan ukuran yang diperlukan, dan tidak sedikit lagi. Jika decoder h.264 membutuhkan ketelitian 19 bit untuk beberapa operasi, maka perangkat keras mengimplementasikan 19 bit dan bukan 20 atau 24 atau 32. Dan permisi, Anda tidak memanipulasi pola litograf. Anda menentukan perangkat keras dan kemudian menjalankannya melalui beberapa perangkat lunak yang menciptakan tata letak.
gnasher729
1
@ MartinMaat: Anda membingungkan pemasaran + standardisasi dengan alasan teknologi. Dan teknologi adalah apa yang kita diskusikan.
gnasher729
0

Tidak selalu lebar kata kekuatan dua. Saya baru-baru ini melakukan beberapa pengkodean dalam DSP SHArC yang memiliki lebar kata 32-bit untuk angka tetapi tidak untuk opcodes (yang lebar 48-bit).

Mungkin alasan mengapa lebar kata adalah kekuatan dua adalah karena beberapa instruksi yang menguji (atau mengatur atau menghapus atau beralih) satu bit atau menggeser (atau memutar) kiri atau kanan dengan jumlah bit tertentu. Ada bidang bit dalam opcode untuk menentukan lokasi bit tunggal atau jumlah bit yang digeser. Jika lebar kata adalah kekuatan dua, bidang bit ini membutuhkan bit log 2 (word_width) untuk mencakup keseluruhan kata. Artinya, kata yang lebar 32 bit membutuhkan bidang 5-bit dalam opcode untuk operasi ini. Jika kata itu lebar 33 bit, itu akan membutuhkan 6 jika tidak maka tidak bisa mencakup seluruh kata, tetapi itu juga akan menjadi kasus jika kata itu 64 bit lebar.

Bit dalam opcode sangat berharga, jadi mereka biasanya tidak ingin menyia-nyiakannya. Maka masuk akal untuk membuat kata kekuatan 2 lebar.

Alasan byte lebar 8 bit adalah bahwa itu adalah kekuatan terkecil dari dua yang dapat menampung karakter ASCII (yaitu 7 bit).

robert bristow-johnson
sumber
Ini bukan bidang keahlian saya tetapi kedengarannya seperti alasan yang valid untuk kekuatan dua byte DAN ukuran kata. Saya membayangkan Anda juga tidak perlu terlalu khawatir tentang UB. Untuk shift 33-bit akan membutuhkan 6-bit opcode, tetapi hanya sekitar setengah dari nilai yang mungkin (0-32) memiliki arti yang berguna. Apakah kamu setuju?
Andreas
opcode harus lebih luas dari bidang bit yang diperlukan untuk penghitungan shift. byte tidak lain adalah kata yang 8 bit. alasan mengapa perangkat keras komputer cenderung menggunakan ukuran kata yang 8 atau 16 atau 32 atau 64 bit (tidak selalu demikian, DSP56000 lama memiliki kata-kata 24-bit) adalah karena alasan yang saya berikan di atas dan alasan yang diberikan oleh vartec : diberi bitmap kata yang dikemas dan Anda diberi nomor baris dan kolom dari piksel tertentu, Anda harus membagi nomor kolom dengan lebar kata untuk mengetahui kata mana yang harus diakses untuk menguji atau mengubah piksel. membaginya dengan kekuatan 2 itu mudah.
robert bristow-johnson
Apa itu "bitmap of words words"? Apakah HighColor cocok dengan deskripsi itu?
Andreas
@ robertbristow-johnson: Total kurangnya imajinasi. Dengan 9 bit byte, kami akan menggunakan kata-kata 36 bit, 130 juta warna, bukan 16 juta warna dalam RGBA, RGB666, bukan RGB555, atau RGB565 monstrositas untuk warna berkualitas rendah, dan semuanya akan baik-baik saja. Dan ASCII akan memasukkan 512 karakter hingga Latin Extended.
gnasher729
@ Andreas, tidak, maksud saya dua "warna". benar-benar putih atau hitam.
robert bristow-johnson