Apakah byte berisi 8 bit, atau 9?

56

Saya membaca dalam tutorial pemrograman rakitan ini bahwa 8 bit digunakan untuk data sedangkan 1 bit untuk paritas, yang kemudian digunakan untuk mendeteksi kesalahan paritas (disebabkan oleh kesalahan perangkat keras atau gangguan listrik).

Apakah ini benar?

xtt
sumber
5
Lihat cs.stackexchange.com/a/19851/584 untuk diskusi tentang apa itu byte .
Pemrogram
63
Artikel itu penuh dengan omong kosong dan Anda harus mengabaikannya.
David Schwartz
12
Jika Anda ingin bertingkah aneh, sebut saja "oktet". Artikel itu ditulis dengan prosesor yang sangat spesifik (yang harus menjaga bit paritas dalam ROM untuk beberapa alasan ...) atau hanya karam. Microchip PICs, misalnya, menggunakan panjang kata 14-bit. Seluruh memori program diatur dalam larik N x 14 bit.
Nick T
13
@NickT: mereka bukan hal yang sama. Oktet selalu 8 bit, satu byte bisa berupa apa saja.
Jörg W Mittag
4
Artikel tersebut mungkin telah merujuk mekanisme koreksi memori yang digunakan di beberapa PC IBM awal, tetapi menyatakan bahwa "byte adalah data 8 bit + paritas 1 bit" sama sekali tidak masuk akal. Sebagai contoh, CD-ROM biasanya menggunakan mekanisme koreksi kesalahan yang jauh lebih serakah - CD audio khas akan menggunakan 8 byte per 24 byte data audio. Tetapi bagian terpenting adalah Anda tidak peduli . Sama sekali. Ini eksklusif untuk mekanisme penyimpanan memori yang sebenarnya - CPU tidak peduli, kode Anda tidak peduli.
Luaan

Jawaban:

78

Satu byte data adalah delapan bit, mungkin ada lebih banyak bit per byte data yang digunakan pada OS atau bahkan tingkat perangkat keras untuk pengecekan kesalahan (bit paritas, atau bahkan skema pendeteksian kesalahan yang lebih maju), tetapi data tersebut delapan bit dan bit paritas apa pun biasanya tidak terlihat oleh perangkat lunak. Satu byte telah distandarisasi untuk berarti 'delapan bit data'. Teksnya tidak salah dengan mengatakan mungkin ada lebih banyak bit yang didedikasikan untuk menyimpan satu byte data daripada delapan bit data, tetapi itu biasanya tidak dianggap sebagai bagian dari byte itu sendiri, teks itu sendiri menunjukkan fakta ini.

Anda dapat melihat ini di bagian tutorial berikut:

Doubleword: a 4-byte (32 bit) data item

4 * 8 = 32, mungkin sebenarnya membutuhkan 36 bit pada sistem tetapi untuk maksud dan tujuan Anda hanya 32 bit.

JustAnotherSoul
sumber
5
Nah, jika perangkat keras mengimplementasikan deteksi kesalahan itu mungkin akan melakukannya dengan potongan memori yang lebih besar daripada byte, seperti dengan sektor 512-byte atau lebih ... dengan cara ini Anda dapat mengurangi overhead memori tambahan yang dibutuhkan. Hanya untuk memperjelas: bahkan dengan koreksi kesalahan perangkat keras masih menggunakan 8-bit per byte ditambah beberapa bit untuk setiap "potongan" data, yang mungkin jauh lebih besar dari satu byte.
Bakuriu
11
Perhatikan bahwa ada sistem dengan byte non-8-bit yang terlihat oleh perangkat lunak. Lihat Platform apa yang memiliki char selain 8-bit? pertanyaan di StackOverflow.
Ruslan
3
Ya, mereka memang ada. Padahal tautan itu berbicara tentang karakter non-8-bit. Seolah-olah: byte digunakan untuk hanya merujuk pada jumlah bit yang diambil sistem untuk menyimpan 'char', yang serendah enam bit. Tapi IIRC itu distandarisasi dalam spesifikasi IEC-80000 bahwa byte adalah 8-bit. Saat Anda menjauh dari sistem arus utama, tentu saja Anda menemukan keanehan, dan standar bukanlah hukum.
JustAnotherSoul
3
@JustAnotherSoul: Dan ada standar yang bersaing, yang mendefinisikan byte sebagai "setidaknya 8 bit" atau dengan cara lain. Sangat menarik untuk melihat bagaimana dekade kemudian definisi perubahan byte dalam pikiran orang. Kembali ke masa byte arsitektur yang jauh lebih heterogenitas hanyalah unit terkecil yang dapat dialamatkan dari arsitektur Anda (lihat berbagai PDP sebagai contoh). Ini juga alasan bahwa dalam munculnya internet istilah oktet digunakan untuk menggambarkan data pada kabel, karena byte bukanlah kata universal untuk sepotong data 8 bit.
PlasmaHH
2
@JustAnotherSoul perhatikan bahwa chardalam C (yang terkait dengan tautan) sebenarnya adalah unit memori terkecil yang dapat dialamatkan. Hanya disebut char , tetapi Standar C membuatnya identik dengan byte .
Ruslan
48

Secara tradisional, byte bisa berukuran berapa saja, dan hanya unit memori terkecil yang bisa dialamatkan. Saat ini, 8 bit byte telah cukup standar untuk perangkat lunak. Seperti yang dikatakan JustAnotherSoul, perangkat keras dapat menyimpan lebih banyak bit dari pada 8 bit data.

Jika Anda bekerja pada perangkat logika yang dapat diprogram, seperti FPGA, Anda mungkin melihat bahwa memori internal mereka sering dialamatkan sebagai potongan 9-bit, dan sebagai penulis HDL, Anda dapat menggunakan bit ke-9 untuk memeriksa kesalahan atau hanya untuk menyimpan jumlah yang lebih besar data per "byte". Saat membeli chip memori untuk perangkat keras khusus, Anda biasanya memiliki pilihan 8 atau 9 bit unit yang dapat dialamatkan (atau 16/18, 32/36, dll), dan kemudian terserah Anda apakah Anda memiliki "bit" 9 bit dan apa Anda lakukan dengan bit ke-9 jika Anda memilih untuk memilikinya.

Extrarius
sumber
10
Umumnya ketika ada sekelompok data yang secara logis satu unit tetapi mengandung lebih / kurang dari 8 bit, itu disebut "kata." Sebagai contoh, beberapa prosesor menggunakan kata instruksi 40-bit.
Devsman
3
+1. Kebetulan, ada arsitektur dengan "bit pointer" dan "byte pointer". Dalam arsitektur seperti, byte secara teknis tidak "unit dialamatkan terkecil dari memori" (karena Anda dapat mengatasi setiap bit secara independen), meskipun sulit untuk ringkas mengatakan apa itu adalah . Kurasa itu semacam "Aku tahu kapan aku melihatnya". :-P
ruakh
18
"Octet" adalah kata yang secara tradisional digunakan untuk berarti "Saya akan menyebutnya byte, tapi saya benar-benar berarti 8 bit" untuk berbagai protokol komunikasi antara sistem yang mungkin memiliki ukuran byte yang berbeda. Tapi hari-hari ini, menggunakan byte berarti apa-apa selain 8 bit adalah anakronistik.
wnoise
@Devsman Belum tentu. chip x86 memiliki 32 bit kata dan 8 bit byte, misalnya. Byte adalah ukuran terkecil yang bisa dialamatkan. Kata ini sedikit lebih samar-samar didefinisikan, tetapi cenderung menjadi ukuran yang paling nyaman untuk digunakan; yaitu panjang operan yang diharapkan dari sebagian besar instruksi.
Ray
Ini harus ditandai sebagai jawaban yang benar, itu lebih benar.
awiebe
32

Teks itu sangat buruk. Dia hampir pasti berbicara tentang ECC (kode koreksi kesalahan) RAM.

ECC ram biasanya akan menyimpan informasi senilai 8-bit menggunakan 9-bit. Bit per byte tambahan digunakan untuk menyimpan kode koreksi kesalahan.

ECC vs non-ECC (Dalam kedua kasus, setiap byte tersebar di setiap chip. Gambar milik Puget Systems )

Ini semua sama sekali tidak terlihat oleh pengguna perangkat keras. Dalam kedua kasus, perangkat lunak yang menggunakan RAM ini melihat 8 bit per byte.


Sebagai tambahan: kode koreksi kesalahan dalam RAM biasanya tidak benar-benar 1 bit per byte; mereka bukan 8 bit per 8 byte. Ini memiliki overhead ruang yang sama, tetapi memiliki beberapa keuntungan tambahan. Lihat SECDED untuk info lebih lanjut.

BlueRaja - Danny Pflughoeft
sumber
12
Parity RAM dan ECC RAM adalah hal yang berbeda. Parity RAM menyimpan satu bit tambahan per domain kesalahan, dapat mendeteksi semua kesalahan bit tunggal dan tidak ada kesalahan bit ganda, dan tidak dapat memperbaiki apa pun. ECC menyimpan sejumlah bit tambahan per domain kesalahan, dapat mendeteksi dan memperbaiki semua kesalahan bit tunggal, dapat mendeteksi tetapi tidak memperbaiki semua kesalahan bit ganda, dan dapat menangkap beberapa kesalahan yang lebih besar. Parity RAM saat ini sangat jarang, hampir seluruhnya telah digantikan oleh ECC RAM.
Tandai
1
@ Mark: Saya mengisyaratkan hal itu di paragraf terakhir saya, ada lebih banyak detail di tautan. RAM paritas pada dasarnya tidak ada saat ini karena kode koreksi kesalahan (72,64) memiliki overhead yang sama dengan kode paritas (9,8).
BlueRaja - Danny Pflughoeft
7
Sementara Anda mengisyaratkan hal itu, Anda juga menyatakan hal-hal yang membuatnya tidak tepat / membingungkan. ECC RAM tidak "menyimpan informasi senilai 8-bit menggunakan 9-bit". Menyatakan itu menyiratkan Anda dapat melakukan ECC untuk 8 bit menggunakan 9 bit, yang tidak mungkin. Untuk 8 bit informasi diskrit, 1 bit ekstra sudah cukup untuk mendeteksi , tidak memperbaiki, kesalahan bit tunggal. ECC menggunakan jumlah bit yang lebih besar, atau byte, untuk memuat data yang cukup untuk memperbaiki kesalahan pada kelompok data, biasanya lebih besar dari satu byte. Meskipun ini mungkin rata - rata bit ekstra per 8 bit, itu tidak dapat dipecah untuk mengaitkan hanya 1 bit dengan masing-masing 8 bit.
Makyen
Ada skema 36-bit (32 bit word + 4 bit ECC) yang memungkinkan koreksi kesalahan bit tunggal dan deteksi kesalahan dua bit. Meskipun Anda dapat membaginya secara aritmatis menjadi 8 bit data + 1 bit ECC, ia tidak dapat / tidak berfungsi seperti itu. Diperlukan 4 bit ECC lengkap, yang mencakup 32 bit data.
Zenilogix
@ Zenilogix dan lainnya yang mengulangi hal yang sama: Saya mengerti betul cara kerja ECC, dan tidak ada yang saya katakan salah. Saya tidak pernah mengklaim 8-bit ECC dapat dilakukan dengan 9 bit, saya katakan ECC RAM menggunakan 9-bit-per-byte penyimpanan. Cara kerja ECC benar-benar di luar cakupan untuk pertanyaan ini, itulah sebabnya saya meninggalkan detail sebagai tambahan pada tautan. Tolong hentikan semua komentar bagus.
BlueRaja - Danny Pflughoeft
16

Secara umum, jawaban singkatnya adalah byte adalah 8 bit. Ini terlalu menyederhanakan masalah (kadang-kadang bahkan sampai ke titik ketidaktepatan), tetapi merupakan definisi yang kebanyakan orang (termasuk sejumlah besar programmer) yang akrab dengan, dan definisi hampir semua orang default (terlepas dari berapa banyak byte ukuran berbeda yang mereka miliki) Saya harus bekerja dengan).

Lebih khusus, byte adalah unit memori terkecil yang dapat dialamatkan untuk arsitektur yang diberikan, dan umumnya cukup besar untuk menampung satu karakter teks. Pada kebanyakan arsitektur modern, byte didefinisikan sebagai 8 bit; ISO / IEC 80000-13 juga menentukan bahwa byte adalah 8 bit, seperti halnya konsensus populer (yang berarti bahwa jika Anda berbicara tentang, katakanlah, byte 9-bit, Anda akan mengalami banyak masalah kecuali Anda secara eksplisit nyatakan bahwa Anda tidak bermaksud byte normal).

Namun, ada pengecualian untuk aturan ini. Sebagai contoh:

Jadi, dalam kebanyakan kasus, byte biasanya akan menjadi 8 bit. Jika tidak, mungkin 9 bit, dan mungkin atau mungkin bukan bagian dari kata 36-bit.

Justin Time 2 Reinstate Monica
sumber
8

Perhatikan bahwa istilah byte tidak didefinisikan dengan baik tanpa konteks. Sejauh menyangkut arsitektur komputer, Anda dapat mengasumsikan bahwa byte adalah 8-bit, setidaknya untuk arsitektur modern. Ini sebagian besar distandarisasi oleh bahasa pemrograman seperti C, yang membutuhkan byte untuk memiliki setidaknya 8 bit tetapi tidak memberikan jaminan untuk byte yang lebih besar, menjadikan 8 bit per byte satu-satunya asumsi yang aman.

Ada komputer dengan unit yang dapat dialamatkan lebih besar dari 8 bit (biasanya 16 atau 32), tetapi unit tersebut biasanya disebut kata-kata mesin, bukan byte. Misalnya, DSP dengan kata 32K 32-bit RAM akan diiklankan memiliki 128 KB atau RAM, bukan 32 KB.

Hal-hal yang tidak begitu didefinisikan dengan baik ketika datang ke standar komunikasi. ASCII masih banyak digunakan, dan memiliki byte 7-bit (yang cocok dengan byte 8-bit pada komputer). Transceiver UART masih diproduksi untuk memiliki ukuran byte yang dapat dikonfigurasi (biasanya, Anda dapat memilih setidaknya antara 6, 7 dan 8 bit per byte, tetapi 5 dan 9 tidak pernah terdengar).

Dmitry Grigoryev
sumber
6

Byte biasanya didefinisikan sebagai unit ruang memori terkecil yang dapat dialamatkan secara individual. Itu bisa dalam berbagai ukuran. Ada arsitektur dengan ukuran byte di mana saja antara 6 dan 9 bit, bahkan mungkin lebih besar. Ada juga arsitektur di mana satu-satunya unit dialamatkan adalah ukuran bus, pada arsitektur seperti itu kita dapat mengatakan bahwa mereka tidak memiliki byte , atau byte adalah ukuran yang sama dengan kata (dalam satu kasus tertentu saya tahu itu akan menjadi 32 bit); Either way, sudah pasti tidak 8 bit. Demikian juga, ada arsitektur bit-addressable, pada arsitektur itu, kita dapat kembali berpendapat bahwa byte tidak ada, atau kita bisa berpendapat bahwa byte adalah 1 bit; cara baik adalah definisi yang masuk akal, tetapi 8 bit jelas salah.

Pada banyak arsitektur tujuan umum arus utama, satu byte berisi 8 bit. Namun, itu tidak dijamin. Semakin jauh Anda menyimpang dari arus utama dan / atau dari CPU tujuan umum, semakin besar kemungkinan Anda akan menemukan non-8-bit-byte. Sejauh ini beberapa perangkat lunak yang sangat portabel bahkan membuat ukurannya dapat dikonfigurasi. Misalnya, versi GCC yang lebih lama berisi makro yang disebut BITS_PER_BYTE(atau sesuatu seperti itu), yang mengonfigurasi ukuran byte untuk arsitektur tertentu. Saya percaya beberapa versi NetBSD yang lebih lama dapat dibuat untuk berjalan pada arsitektur non-8-bit-per-byte.

Jika Anda benar-benar ingin menekankan bahwa Anda berbicara tentang jumlah persis 8 bit daripada jumlah memori terkecil yang dapat dialamatkan, betapapun besarnya, Anda dapat menggunakan istilah octet , yang misalnya digunakan dalam banyak RfC baru.

Jörg W Mittag
sumber
2
Standar C dan C ++ memiliki makro yang telah ditentukan CHAR_BIT(ditemukan di limits.h), saya tidak tahuBITS_PER_BYTE
njuffa
3

Ketika saya mulai pemrograman pada tahun 1960, kami memiliki kata-kata 48 bit dengan 6 bit byte - mereka tidak menyebut nama itu, mereka disebut karakter. Kemudian saya bekerja pada komputer Golem dengan 75 bit kata dan 15 bit byte. Kemudian, 6 bit byte adalah norma, sampai IBM keluar dengan 360, dan saat ini satu byte umumnya setara dengan satu oktet, yaitu 8 bit data. Beberapa perangkat keras memiliki bit tambahan untuk deteksi kesalahan dan mungkin untuk koreksi kesalahan, tetapi ini tidak dapat diakses oleh perangkat lunak.

Jonathan Rosenne
sumber
3

Satu byte adalah 8 bit.

Di masa lalu yang jauh, ada definisi kata memori dan byte yang berbeda. Saran bahwa ambiguitas ini tersebar luas atau lazim dalam kehidupan saat ini adalah salah.

Sejak setidaknya tahun 1970-an, byte telah 8 bit. Populasi massal komputer di rumah dan PC semuanya secara jelas menggunakan byte sebagai nilai 8-bit dalam dokumentasi mereka, seperti halnya semua lembar data dan dokumentasi untuk drive floppy disk, drive hard disk dan PROM / EPROM / EEPROM / Flash EPROM / SRAM / SDRAM chip memori yang telah saya baca pada periode waktu itu. (Dan saya secara pribadi telah membaca banyak di antara mereka selama periode waktu itu.) Ethernet dan beberapa protokol komunikasi lain bagi saya sama tidak lazimnya dalam membicarakan oktet.

Ambiguitas dari istilah byte itu sendiri merupakan hal yang langka dan tidak jelas. Sangat, sangat sedikit dari populasi programmer, insinyur desain, insinyur pengujian, tenaga penjualan, insinyur layanan atau penumpang rata-rata dalam 30 tahun terakhir atau lebih akan berpikir itu berarti sesuatu selain nilai 8-bit, jika mereka mengenali kata itu sama sekali .

Ketika sebuah byte ditangani oleh perangkat keras, seperti ketika disimpan dalam chip memori atau dikomunikasikan sepanjang kabel, perangkat keras dapat menambahkan data yang berlebihan ke byte. Ini nantinya dapat membantu dalam mendeteksi kesalahan perangkat keras sehingga data yang tidak dapat diandalkan dapat dikenali dan dibuang (misalnya paritas, checksum, CRC). Atau mungkin memungkinkan kesalahan dalam data untuk diperbaiki dan data pulih (misalnya ECC). Either way, data yang berlebihan akan dibuang ketika byte telah diambil atau diterima untuk diproses lebih lanjut. Byte tetap nilai pusat 8-bit dan data redundan tetap data redundan.

TonyM
sumber
2

Pertama, tutorial yang Anda referensikan sepertinya sudah ketinggalan zaman, dan sepertinya diarahkan pada versi lama dari prosesor x86, tanpa menyatakannya, jadi banyak hal yang Anda baca di sana tidak akan dipahami oleh orang lain (misalnya jika Anda mengklaim bahwa KATA adalah 2 byte, orang tidak akan tahu apa yang Anda bicarakan, atau mereka akan tahu bahwa Anda telah diajarkan berdasarkan pada prosesor x86 yang sangat ketinggalan zaman dan akan tahu apa yang diharapkan).

Byte adalah berapa pun jumlah bit yang diputuskan seseorang. Itu bisa 8 bit, atau 9 bit, atau 16 bit, apa saja. Pada 2016, dalam banyak kasus, byte akan menjadi delapan bit. Agar aman, Anda dapat menggunakan istilah octet - octet selalu, selalu, delapan bit.

Kebingungan sebenarnya di sini membingungkan dua pertanyaan: 1. Berapa jumlah bit dalam satu byte? 2. Jika saya ingin mentransfer satu byte dari satu tempat ke tempat lain, atau jika saya ingin menyimpan byte, menggunakan cara fisik praktis, bagaimana saya melakukannya? Pertanyaan kedua biasanya kurang menarik bagi Anda, kecuali jika Anda bekerja di perusahaan yang membuat modem, atau hard drive, atau drive SSD. Dalam praktiknya Anda tertarik pada pertanyaan pertama, dan untuk pertanyaan kedua Anda hanya mengatakan "baiklah, seseorang memperhatikan hal itu".

Bit paritas yang disebutkan adalah mekanisme primitif yang membantu mendeteksi bahwa ketika byte disimpan dalam memori, dan kemudian byte dibaca, memori telah berubah karena beberapa kecelakaan. Itu tidak terlalu bagus dalam hal itu, karena tidak akan menemukan bahwa dua bit telah diubah sehingga perubahan cenderung tidak terdeteksi, dan itu tidak dapat pulih dari masalah karena tidak ada cara untuk mengetahui mana dari 8 bit yang telah berubah , atau bahkan jika bit paritas telah berubah.

Bit paritas secara praktis tidak digunakan dalam bentuk primitif itu. Data yang disimpan secara permanen biasanya dilindungi dengan cara yang lebih rumit, misalnya dengan menambahkan checksum 32 bit atau lebih lama ke blok 1024 byte - yang membutuhkan ruang lebih sedikit (0,4% dalam contoh ini, bukan 12,5%) dan jauh kecil kemungkinannya untuk tidak mencari tahu ketika ada sesuatu yang salah.

gnasher729
sumber
Benar-benar ketinggalan jaman: paragraf 16-byte belum menjadi unit memori yang berarti sejak beralih dari mode nyata dan pengalamatan tersegmentasi.
Markus
Secara pribadi, saya akan menganggap "WinAPI" ketika seseorang berbicara tentang 2-byte WORD, yang ... agak membuktikan maksud Anda, karena banyak nama tipe WinAPI sudah usang tetapi disimpan untuk kompatibilitas ke belakang. xP
Justin Time 2 Reinstate Monica
1

Terlepas dari jawaban yang sangat bagus yang diberikan di sini, saya terkejut bahwa tidak ada yang menunjukkan bahwa bit paritas atau bit koreksi kesalahan adalah definisi 'metadata' dan jadi bukan bagian dari byte itu sendiri.

Satu byte memiliki 8 bit !

pengguna34445
sumber
0

Dalam penggunaan modern, byte adalah 8 bit, titik (walaupun secara historis memiliki definisi lain). Di sisi lain, kata data adalah apa pun yang ditangani perangkat keras sebagai unit atom - dapat berupa 8 bit, 9 bit, 10 bit, 12 bit, 16 bit, 20 bit, 24 bit, 32 bit, dll. Berbagai komputer sistem selama bertahun-tahun memiliki semua jenis ukuran kata yang berbeda.

Untuk menerapkan sistem memori atau protokol transmisi, ada baiknya menambahkan deteksi / koreksi kesalahan yang melibatkan bit tambahan. Mereka tidak menghasilkan byte 9-bit karena, seperti yang dinyatakan di atas, byte adalah 8 bit.

Berbagai skema menambah deteksi kesalahan dan / atau koreksi dengan berbagai cara.

Penggunaan paritas yang umum adalah menambahkan bit tambahan ke kata transmisi sehingga penerima dapat mendeteksi sedikit kesalahan.

Skema yang dapat memberikan koreksi kesalahan bit tunggal melibatkan penambahan 4 bit ECC per kata data 32 bit. Ini kebetulan setara dengan 1 bit per byte, tetapi tidak bisa / tidak berfungsi seperti itu. Satu kata data 36-bit dapat membawa informasi yang cukup untuk pulih dari kesalahan bit tunggal untuk ruang data 32-bit.

Zenilogix
sumber
0

8 bit. Di dalam cpu dan keyboard, itu adalah 9 dan 11 bit. Data pengguna direpresentasikan dalam 8 bit. Tombol pada keyboard mengirim nyanyian yang terbagi menjadi 11 bit. 1 bit awal, 1 bit akhir, 1 bit paritas, dan 8 bit mewakili tombol yang ditekan.

Siva
sumber
2
Apakah ini menjawab pertanyaan? Apakah maksud Anda panjang yang berbeda untuk byte di cpu dan byte di keyboard? Haruskah "bernyanyi" menjadi "string" atau "aliran"?
Apass. Jack
Kedengarannya Anda sedang berbicara tentang protokol kawat termasuk framing data, bukan data aktual itu sendiri.
Peter Cordes
Saya akan menganggap "bernyanyi" adalah "sinyal", saya sendiri, @ Apass.Jack.
Justin Time 2 Reinstate Monica