Di masa lalu 8 bit informasi dan 8 bit komputer rukun
Ada ASCII 8 bit sehingga byte tunggal adalah char tunggal dan posisi tunggal dan seluruh dalam memori / disk
kemudian datang komputer 16 bit, 32 bit, dan 64 bit tapi saya kehilangan jalan
bagaimana karakter disimpan? Apakah ASCII 16/32/64 bit digunakan ??
bagaimana jika saya memiliki data lebar 8 bit? dapatkah saya menyimpan Banyak karakter dalam satu posisi?
misalnya untuk 32 bit, jika hanya 8 bit yang digunakan, ada 24 bit yang tidak digunakan?
memori / posisi disk-> 0000000 00000000 0000000 xxxxxxx
atau apakah memori 16/32/64 arah / disk masih terus menunjuk ke 8 bit, bukan 16/32/64-bit-kata?
jadi 8 bit masih hidup dan menendang? sepertinya YA
SUNTING
Lupa tentang ASCII, saya ingin tahu apakah satu alamat (dalam memori / disk) menunjuk ke byte 8 bit tunggal dalam platform 8/16/32/64 bit
sumber
Jawaban:
Jika lebih dari 8 bit, sebuah karakter bukan ASCII menurut definisi. Angka masih angka.
Bytes masih byte. Komputer dengan jalur data yang lebih luas hanya mengambil lebih banyak pada saat yang bersamaan. Sistem 32-bit akan memanipulasi 4 byte sekaligus, dan komputer 64-bit akan menggunakan 8 byte.
Bagaimana disk mengelola data adalah masalah yang terpisah - disk akan mengerjakannya sendiri secara internal dan merespons antarmuka (SATA dll) dengan potongan data berukuran tepat.
sumber
Ukuran ruang alamat dalam byte. Misalnya, Anda membeli komputer dengan 4GB RAM, atau 3TB disk. Jadi alamat juga menunjuk ke satu byte.
Saat menangani lebih dari 8 bit, Anda juga mereferensikan byte yang mengikuti. Misalkan Anda memiliki pointer ke alamat 104. Jika Anda memuat ke register 64-bit, Anda mendapatkan byte 104 hingga 111. Jika Anda menyimpan, Anda menimpa alamat tersebut.
Pertanyaan dasar Anda tentang bagaimana data karakter disimpan dalam memori, baik dalam RAM dan di-disk? Secara umum, data dalam memori kerja membutuhkan lebih banyak ruang tetapi lebih mudah untuk dikerjakan; sementara pada disk lebih kompak, dengan semacam pengkodean karakter . Tetapi ada banyak variasi, dan pro dan kontra untuk mereka.
Sebagai contoh, tidak biasa bagi karakter untuk selalu mengambil masing-masing dua byte dalam memori, tetapi ketika disimpan dalam disk, ambil satu hingga empat byte. Misalnya "ABC" dalam memori: 65 00 66 00 67 00; pada disk: 65 66 67. Untuk karakter khusus yang dikenal sebagai Byte Order Mark, dalam memori: 255 254; pada disk: 239 187 191. Ini adalah karakter Unicode, disimpan dengan pengkodean UTF-8 pada disk.
(Dan secara teknis, ASCII adalah 7-bit; ia hanya mendefinisikan 128 karakter. Unicode adalah superset ASCII 16-bit.)
sumber
Semuanya sedikit lebih rumit daripada jawaban sederhana yang diberikan sejauh ini.
Ada 2 aspek: Mesin, dan penyimpanan massal.
Di Mesin:
Itu tergantung pada arsitektur perangkat keras.
Pada PC, pengalamatan adalah dengan byte, dan Anda dapat mengakses byte (8 bit), kata (16 bit), kata ganda (32 bit), dan kata kunci (64 bit).
Pada arsitektur lain, Anda mungkin hanya memiliki akses ke "gumpalan" berukuran lain untuk tipe data mesin. Misalnya pada TMS320C40 Anda dapat mengakses 32 bit kata, dan 8 bit byte dimasukkan ke dalam kata-kata ini. Anda dapat mengemas byte masuk dan keluar, tetapi prosesnya cukup lambat yang membutuhkan beberapa instruksi mesin.
Jadi pada TMS320C40 kompiler C memiliki tipe char asli yaitu 32 bit!
(Ketika pemrograman dalam C, jangan pernah berasumsi bahwa char adalah 8 bit. Baca manual kompiler Anda, terutama jika melakukan pemrograman tertanam).
Hal-hal menjadi lebih rumit ketika endian-ness ikut bermain, ada 2 pengaturan umum: sedikit dan big endian, ini menggambarkan bagaimana byte diatur agar sesuai dengan jumlah yang lebih besar (biasanya mesin itu menggunakan ukuran kata asli). Jadi misalnya, pada mesin 32 bit Anda mungkin menemukan byte mengatur seperti ini:
Alamat X: Byte 0, Byte 1, Byte 2, Byte 3
Alamat X + 4: Byte 4, Byte 5, Byte 6, Byte 7
ATAU
Alamat X: Byte 3, Byte 2, Byte 1, Byte 0
Alamat X + 4: Byte 7, Byte 6, Byte 5, Byte 4
(Dan itu menjadi lebih kompleks karena bit dalam byte juga memiliki endian-ness.)
Sebagian besar hal seperti ini hanya muncul sebagai kekhawatiran bagi para perancang perangkat keras. Tetapi jika Anda harus menulis driver perangkat dan hal-hal yang berbicara dengan perangkat keras yang melalui register yang dipetakan memori, itu menjadi masalah besar.
Contoh sederhana dapat mencukupi:
Membuang satu blok memori pada alamat X mungkin menyajikan aliran byte:
01 02 03 04 05 06 07 08
TETAPI membuang blok yang sama dari alamat yang sama dan menampilkan bilangan bulat 16 bit (hex) dapat ditampilkan sebagai:
0201 0403 0605 0807
Dan dumping lagi dari alamat yang sama dengan integer 32 bit di hex mungkin hadir sebagai:
04030201 08070605
Hal ini menyebabkan kebingungan dalam jumlah besar bagi yang belum tahu, karena semuanya tergantung pada endian-ness, dan metode (urutan byte) yang digunakan untuk membuat jumlah yang lebih besar dari yang lebih kecil.
Secara umum bahasa tingkat tinggi menyembunyikan tingkat keburukan ini, tetapi bisa penting untuk hal-hal seperti overlay struktur data, dan, sekali lagi, register kontrol perangkat yang dipetakan memori.
Penyimpanan massal.
Untungnya di sini, hidup jadi lebih mudah.
Anggap saja penyimpanan massal Anda sebagai banyak byte, yang dapat diakses, dan mesin secara ajaib akan mengurus semuanya. Istilah umum yang digunakan untuk hal file sebagai "aliran", di mana Anda mulai di awal dan aliran datang bergulir. (Ini nyaman mengabaikan akses acak.) Bagian terkecil Anda dapat memecah aliran file ke dalam adalah byte.
Jika sebuah mesin ingin menyimpan jumlah yang lebih besar (kata-kata 16 bit, dll), maka mungkin atau mungkin tidak melakukan beberapa tingkat transformasi untuk memasukkannya ke dalam byte yang pergi ke penyimpanan.
Peringatan.
Semua hal di atas berkaitan dengan hal-hal yang mendasari level rendah - byte, kata-kata, dan sebagainya.
Program memanfaatkan ini dalam segala macam cara. Jadi misalnya Anda akan mendapatkan KARAKTER yang diwakili oleh byte jika cocok dengan ASCII (atau bahkan EBCDIC bagi mereka yang memiliki memori panjang). Sistem karakter Unicode modern dapat menggunakan Karakter Lebar (umumnya ini 16 bit), tetapi ada banyak sistem pengkodean untuk unicode. Halaman Wikipedia di Unicode cukup instruktif.
Konvensi dalam C menganggap CHARACTER = BYTE adalah hari-hari ini, menyesatkan dan salah arah. Yang terbaik untuk hal "char" adalah sinonim untuk "byte" - kecuali mesin Anda / compiler mengatakan sebaliknya (lihat di atas). BAIK C program umumnya mendefinisikan satu set jenis yang disukai seperti "UINT8" - integer 8 bit unsigned, "SINT8" - menandatangani integer 8 bit, dan seterusnya, sehingga program yang ditulis menjadi independen seperti masuk akal mungkin dari kekhasan dari kompiler khusus dan perangkat keras yang mendasarinya.
Untuk pertanyaan spesifik: Bagaimana cara karakter disimpan? Jawabannya adalah, tergantung. Seringkali, karakter ascii yang sesuai dengan byte disimpan sebagai byte. Karakter lebar sering disimpan sebagai kata 16 bit. Tetapi unicode mungkin mengimplementasikan karakter lebar atau salah satu dari sejumlah sistem pengkodean, di mana karakter kasus dapat menempati dari 1 hingga sekitar 4 byte, tergantung pada karakter.
sumber
RAM saat ini, seperti halnya RAM pada tahun 1970-an, masih dapat diatasi dengan 8 bit pada suatu waktu. Jadi setiap alamat memori menunjuk ke byte 8-bit.
Ketika CPU 16-bit dikembangkan, mereka mempertahankan kemampuan untuk mengatasi 8 bit sekaligus untuk keperluan kecepatan dan kompatibilitas. Ada berbagai komponen dari CPU yang dapat memiliki "bitness," lebar register adalah salah satunya. Tetapi hampir semua CPU 16-bit atau lebih besar memiliki instruktur untuk mengakses register 8 bit atas atau bawah. Jadi, hanya karena CPU begitu banyak bit tidak berarti harus mengakses memori atau register dalam ukuran potongan itu.
Jadi untuk menjawab pertanyaan Anda:
Apakah 16/32/64 arah memori / disk masih terus menunjuk ke 8 bit, bukan 16/32/64-bit-kata? Iya. CPU 32-bit memuat 32 bit ke dalam register dari lokasi memoy yang diberikan akan mengambil 4 byte dari DRAM dan memasukkannya ke dalam register.
8 bit masih hidup dan menendang? Iya. Motorola 68000 CPU, sementara itu chip 16-bit (beberapa akan berdebat 32-bit), memiliki instruksi yang disebut ADDQ (untuk ADD QUICK) yang akan mengambil operan dari register atau memori dan menambahkannya ke 8-bit nilai sebenarnya dikodekan dalam instruksi itu sendiri. Saya tidak tahu terlalu banyak tentang perakitan x86 tapi saya yakin ada instruksi serupa yang membatasi kecepatan 8 bit.
sumber
64 bit CPU mampu mengatasi data 8 bit.
Satu
char
disimpan pada satu byte.sumber
char
dalam C, tetapi tidak harus bahasa lain.