Sebagai pengembang web, saya hanya memiliki sedikit pemahaman tentang data biner.
Jika saya mengambil kalimat "Hello world.", Mengubahnya menjadi biner, dan menyimpannya sebagai biner dalam database SQL, sepertinya 1s dan 0s akan memakan lebih banyak ruang daripada huruf. Sepertinya saya suka menggunakan huruf akan seperti menggunakan kompresi, di mana satu simbol adalah singkatan dari multiple.
Tetapi apakah itu benar-benar cara kerjanya?
Apakah menyimpan data teks biasa mengambil lebih sedikit ruang daripada menyimpan pesan yang setara dalam biner?
Jawaban:
Plaintext adalah biner.
Ketika Anda menulis sebuah
H
ke hard drive, kepala tulis tidak mengukir dua garis vertikal dan garis horizontal ke piring, itu secara magnetis mengkodekan bit01001000
1 ke dalam piring.Dari sana, seharusnya jelas bahwa menyimpan data teks biasa memakan jumlah ruang yang persis sama dengan menyimpan data biner.
Tapi plaintext hanyalah satu dari 2 format biner tertentu
Plaintext dapat diubah secara terbalik menjadi format biner lainnya. Salah satu transformasi umum adalah kompresi yang biasanya menghasilkan representasi yang lebih kompak, yang berarti lebih sedikit bit yang digunakan untuk mewakili informasi yang sama.
Bergantung pada apa yang Anda gunakan untuk mewakili plaintext, Anda mungkin dapat menggunakan format biner berbeda untuk mewakili informasi yang sama. Ini mungkin menggunakan lebih banyak ruang, mungkin menggunakan lebih sedikit.
Sebagai contoh, angka-angka
5
dan1234567
dapat diwakili dalam plaintext menggunakan karakter digit, menghasilkan urutan bit ini pada disk 3 :Atau, Anda dapat menggunakan komplemen 32-bit two :
Yang merupakan representasi kurang kompak
5
, tetapi representasi lebih kompak1234567
.Dan ada jumlah representasi lain yang benar-benar tak terbatas yang akan memiliki tingkat keringkasan, dan fleksibilitas yang beragam, meskipun, dalam praktiknya jauh lebih sedikit daripada banyak representasi yang benar-benar digunakan.
1 Dengan asumsi UTF-8. Urutan bit yang tepat untuk karakter tergantung pada pengkodean spesifik yang Anda gunakan.
2 Atau benar-benar, beberapa format, mengingat berbagai penyandian .
3 Jika Anda bertanya-tanya apa delapan angka nol di ujungnya, yah, Anda perlu cara untuk mengetahui berapa lama data tersebut. Opsi pada dasarnya mendidih ke marker (saya menggunakan ini, melalui byte nol), ruang yang didedikasikan untuk menyimpan panjang (Pascal menggunakan byte untuk menyimpan panjang string), atau ukuran tetap (digunakan dalam komplemen dua berikutnya contoh).
sumber
Saya menemukan ini hal yang menyenangkan untuk dipikirkan. Biner bukan 1s dan 0s dalam cara Anda membicarakannya.
Bayangkan ada kuantitas, saya bisa memberi tahu Anda berapa jumlahnya dengan berbagai cara:
Nine
dalam Bahasa InggrisNeuf
di Perancis9
dalam angka ArabIX
dalam angka Romawi1001
dalam Biner dengan angka Arabon off off on
di Biner dengan on / offhigh low low high
dalam Binary diwakili dengan voltase atau tuas atau level air atau muatan listrik ... atau kata-kata bahasa Inggris 'tinggi' dan 'rendah'Mereka semua mewakili hal yang sama. Intinya di sini adalah biner bukan 1s dan 0s, itu hanya satu cara untuk mewakili suatu nilai.
Ketika Anda berbicara tentang mengubah H menjadi biner, Anda mungkin membayangkan melihat 10101010 di layar - tapi itu bukan "biner", itu satu digit untuk setiap bit biner.
Ya, jika Anda mengonversi
H
menjadi "biner" seperti yang biasanya dibicarakan orang, dan kemudian menyatakannya dalam angka Arab dan kemudian menyimpannya, itu akan membutuhkan lebih banyak ruang dengan cara yang sama dengan mengonversiH
menjadiaitch
lebih banyak ruang.Tetapi Anda dapat melihat bahwa biner adalah salah satu cara untuk mewakili suatu kuantitas, baik oleh logika yang mengatakan "jika saya mengubah H menjadi biner dan mewakilinya
high low high low high low high low
maka akan membutuhkan 35 karakter! Itu bahkan lebih dari10101010
! Tapi keduanya sama-sama 'biner' .. jadi bagaimana yang satu lebih besar dari yang lain?Sisi lain dari ini adalah untuk bertanya-tanya bagaimana
H
disimpan oleh komputer, dan melihat bahwaH
itu sendiri hanya cara yang mewakili kuantitas - kuantitas yang sama72
,01001000
atauseventy two
atau kode karakter ASCIIH
. Yang merupakan jawaban 8bittree bahwa teks biasa adalah biner, tapi ini saya mencoba menunjukkan apa artinya .Jadi Anda mendapatkan pola bit di komputer
01001000
dan apa artinya? Apa pun - dapat dibicarakan sebagai angka, sebagai bagian dari file zip, sebagai karakter, tergantung apa maksud dari orang yang membuatnya. Jika Anda tahu itu seharusnya teks biasa, maka itu berasal dari pengkodean karakterH
->01001000
dan Anda mencarinya dengan cara lain di tabel pengkodean karakter - ASCII, UTF-8, shift-jis, dll. Dan temukan font yang tepat karakter dan keluar datangH
atau apa pun. Atau keluarlah karakter yang salah jika Anda menggunakan pencarian enkode yang berbeda dari orang yang membuatnya digunakan. Ini adalah tautan @Eric Lippert.Tetapi ketika saya menulis ini, dan ketika Anda memikirkannya,
H
adalah satu byte dan01001000
8 byte, ya itu lebih banyak ruang. Dan ya itu (representasi dari) biner. Tapi itu pada tingkat abstraksi yang lebih tinggi daripada yang digunakan komputer - biner ditampilkan dalam karakter ASCII, di mana masing-masing karakter diwakili di belakang layar dengan pola bit biner, masing-masing sebesarH
sendirian.sumber
Tidak, tidak pernah.
Komputer Anda sudah menyimpan data teks biasa dalam representasi biner yang setara. Menyimpan sesuatu sebagai teks biasa versus biner hanya menandakan bagaimana komputer harus menginterpretasikan aliran biner yang identik itu .
Itu agak benar. Satu karakter akan mewakili lebih dari satu bit. Masalahnya adalah ukurannya berbeda. Hanya membutuhkan satu bit untuk menyimpan 1 atau 0, tetapi 8 bit (atau lebih) untuk menyimpan karakter teks biasa. Anda tidak mendapatkan apa-apa dengan menggunakan karakter.
Jika ada , Anda bisa mengompres dengan cara lain. Bagaimanapun, 8 bit adalah 256 nilai yang mungkin berbeda, namun teks biasa biasanya terbatas pada huruf, angka, dan beberapa karakter tanda baca. Tidak perlu banyak bit yang dibutuhkan.
sumber