Jako programista bardzo mało rozumiem danych binarnych.
Jeśli wezmę zdanie „Witaj świecie.”, Przekonwertuj go na binarny i zapisz jako binarny w bazie danych SQL, wygląda na to, że cyfry 1 i 0 zajęłyby więcej miejsca niż litery. Wydaje mi się, że używanie liter byłoby jak kompresja, w której jeden symbol oznacza wielokrotność.
Ale czy tak to naprawdę działa?
Czy przechowywanie danych w postaci zwykłego tekstu zajmuje mniej miejsca niż przechowywanie równoważnej wiadomości w formacie binarnym?
Odpowiedzi:
Zwykły tekst jest binarny.
Kiedy piszesz
H
na dysk twardy, głowica zapisująca nie tnie dwóch pionowych linii i poziomej linii na talerzu, magnetycznie koduje bity01001000
1 na talerzu.Stąd powinno być oczywiste, że przechowywanie danych tekstowych zajmuje dokładnie tyle samo miejsca, co przechowywanie danych binarnych.
Ale zwykły tekst jest tylko jednym 2 szczególnym formatem binarnym
Zwykły tekst można odwracalnie przekształcić w inne formaty binarne. Jedną z powszechnych transformacji jest kompresja, która zwykle skutkuje bardziej zwartą reprezentacją, co oznacza mniej bitów używanych do reprezentowania tej samej informacji.
W zależności od tego, co reprezentujesz jako zwykły tekst, możesz użyć różnych formatów binarnych do przedstawienia tych samych informacji. Może to zajmować więcej miejsca, może zużywać mniej.
Na przykład liczby
5
i1234567
mogą być reprezentowane w postaci zwykłego tekstu za pomocą cyfr, co daje następujące sekwencje bitów na dysku 3 :Alternatywnie możesz użyć uzupełnienia 32-bitowego drugiego :
Która jest mniej zwartą reprezentacją
5
, ale bardziej zwięzłą reprezentacją1234567
.I istnieje dosłownie nieskończona liczba innych reprezentacji, które miałyby różne poziomy zwartości i elastyczności, chociaż w praktyce jest o wiele mniej niż tyle rzeczywistych reprezentacji.
1 Zakładając, że UTF-8. Dokładna sekwencja bitów dla znaku zależy od tego, jakiego konkretnego kodowania używasz.
2 Lub kilka formatów, biorąc pod uwagę różne kodowania .
3 Jeśli zastanawiasz się, jakie są te osiem zer na końcach, musisz wiedzieć, jak długo trwają dane. Opcje w zasadzie sprowadzają się do znacznika (użyłem tego przez bajt zerowy), miejsca przeznaczonego do przechowywania długości (Pascal użył bajtu do przechowywania długości łańcucha) lub stałego rozmiaru (użytego w dopełnieniu kolejnych dwóch przykład).
źródło
Uważam to za świetną zabawę do myślenia. Binarne to nie 1 i 0 w sposobie, w jaki o tym mówisz.
Wyobraź sobie, że istnieje pewna ilość, którą mogę powiedzieć na wiele różnych sposobów:
Nine
po angielskuNeuf
po francusku9
cyframi arabskimiIX
cyframi rzymskimi1001
w formacie binarnym z cyframi arabskimion off off on
w trybie binarnym z włącz / wyłączhigh low low high
w formacie binarnym reprezentowanym przez napięcia lub dźwignie, poziomy wody lub ładunek elektryczny ... lub angielskie słowa „wysoki” i „niski”Wszystkie reprezentują to samo. Chodzi o to, że wartość binarna to nie 1 i 0, to tylko jeden sposób reprezentacji wartości.
Kiedy mówisz o konwersji H na binarną, prawdopodobnie wyobrażasz sobie, że widzisz 10101010 na ekranie - ale to nie jest „binarne”, to jedna cyfra na każdy bit binarny.
Tak, jeśli przekonwertowałeś
H
na „binarny”, gdy ludzie zwykle o nim mówią, a następnie przedstawił to cyframi arabskimi, a następnie zapisał go, zajęłoby to więcej miejsca w taki sam sposób, jak konwersjaH
naaitch
więcej miejsca.Ale widzisz, że binarny jest jednym ze sposobów reprezentowania wielkości, dobrze przez logikę mówiącą: „jeśli przekonwertowałem H na binarny i przedstawię go tak
high low high low high low high low
, że zajmie to 35 znaków! To nawet więcej niż10101010
! Ale te dwa są„ binarne ” .. więc jak jedno jest większe od drugiego?Druga strona to się zastanawiać, w jaki sposób
H
przechowywane są przez komputer, a widząc, żeH
jest się tylko sposobem reprezentowania ilość - ta sama ilość72
,01001000
lubseventy two
czy kod ASCIIH
. Co jest odpowiedzią 8bittree, że zwykły tekst jest binarny, ale to ja próbuję pokazać, co to znaczy .Masz więc trochę wzorca w komputerze
01001000
i co to oznacza? Wszystko - o czym można mówić jako liczbę, jako część pliku zip, jako postać, zależy od intencji osoby, która go utworzyła. Jeśli wiesz, że powinien to być zwykły tekst, to pochodzi on z kodowania znakówH
->01001000
i patrzysz w drugą stronę w tabeli kodowania znaków - ASCII, UTF-8, shift-jis itp. I znajdź odpowiednią czcionkę charakter i wychodziH
. Lub wychodzi niewłaściwy znak, jeśli użyjesz innego wyszukiwania kodowania niż osoba, która go utworzyła. To jest link @Eric Lippert.Ale kiedy to piszę i jak o tym myślisz,
H
jest to jeden bajt i01001000
ma 8 bajtów, tak, to więcej miejsca. I tak, to (reprezentacja) pliku binarnego. Ale jest na wyższym poziomie abstrakcji niż komputer - plik binarny wyświetlany w postaci znaków ASCII, gdzie każda postać jest reprezentowana za kulisami za pomocą binarnego wzorca bitowego, każdy tak duży jakH
sam.źródło
Nie, nigdy.
Twój komputer już przechowuje dane tekstowe w równoważnej reprezentacji binarnej. Przechowywanie czegoś jako zwykłego tekstu w porównaniu do pliku binarnego po prostu sygnalizuje, jak komputer powinien interpretować ten sam strumień binarny.
To trochę prawda. Jedna postać będzie reprezentować więcej niż jeden bit. Problem polega na tym, że mają różne rozmiary. Zapisanie 1 lub 0 zajmuje tylko jeden bit, ale 8 bitów (lub więcej), aby zapisać znak zwykłego tekstu. Nic nie zyskujesz, używając postaci.
Jeśli już , możesz kompresować rzeczy w drugą stronę. W końcu 8 bitów to 256 różnych możliwych wartości, ale zwykły tekst zwykle ogranicza się do liter, cyfr i kilku znaków interpunkcyjnych. Nie potrzebuje tyle bitów, ile potrzeba.
źródło