Биты, Болк и Уникод

Тем, кто плохо учился в школе, т. е. не читал блестящей заметки Сполского про Уникод, может пригодиться заметка Болка.

Если вы читаете по-английски, я рекомедую всё же Сполского, у него понятнее и последовательнее. Главное, что Джоел обращает внимание на разницу между таблицей символов (то есть тем, какому номеру соответствует какой символ) и кодировкой (то есть тем, как именно эти номера упаковываются в байты). Это позволяет сразу понять, что не бывает кодировки «Уникод», что это как «Эйч-ди» — просто маркетинговый термин, значение которого нужно выяснять в каждом случае заново.

Кстати, слова байт и бит в родительном (не счётном) падеже множественного числа будут: байтов, битов. Ещё Болк ошибается, говоря, что в одном байте можно уложить числа до 256 (на самом деле до 255); в двух — до 65536 (на самом деле до 65535); что информации меньше бита не бывает (на самом деле бывает).

Добавлено в 15:41: Ну вот, щас Болк все косяки исправит и моя заметка потеряет смысл.

Дальше
27 комментариев
BOLK 2009

В байте укладывается 256 чисел: от нуля до 255, ну а про полбита — это просто лажа :)

Кодировка «Уникод» всё же бывает — это стандарт с таким названием.

Илья Бирман 2009

От 0 до 255, совершенно верно. В заметке у тебя сказано иное.

BOLK 2009

Да, какой-то баг в голове, не увидел это место, когда вычитывал. Поправил, спасибо!

Oleg Andreev 2009

В байте укладывается 256 чисел от 42 до 297.

Илья Бирман 2009

От 42 до 188 и от далее от 41432534627 до 41432534734, а байт со всеми включенными единицами означает число Пи в квадрате.

BOLK 2009

Про «меньше бита» и «нет такой кодировки» не исправлю :)

BOLK 2009

Олег, это совершенно неважно как называется первое число — «один» или «сорок два». И уж тем более это не важно в статье про Unicode. Перемещение точки отсчёта ничего не мешает.

Oleg Andreev 2009

Да я знаю. Просто в одном байте можно-таки уложить числа до 256 :-)

Илья Бирман 2009

Ты говоришь про интерпретацию байта, а не про фактическое двоичное число, записанное его битами. Записать число 256 восьмизначным двоичным числом невозможно. А в остальном — да, в байте может вместиться 256 самых популярных фильмов в эйч-ди качестве (что бы это ни значило) и с субтитрами на всех языках. Только тогда «интерпретатор» этого замечательного байта будет представлять собой массив из нескольких жёстких дисков.

Baka 2009

Ты говоришь про интерпретацию байта, а не про фактическое двоичное число, записанное его битами.

«фактическое двоичное число» — это уже интерпретация. Сам байт — это только (упорядоченный) набор битов.
Раньше байт (когда означал число со знаком) вообще только 255 чисел обозначал (точнее, нулей было два — положительный и отрицательный).

Илья Бирман 2009

«Раньше» — это в какой архитектуре? Число со знаком записывают так, чтобы после 127 (0111 1111) шло -128 (1000 0000) и далее до -1 (1111 1111). Отрицательного нуля при этом никакого нет.

Spectator 2009

Ага, заметка Болка не блестящая!

Илья Бирман 2009

В том-то и дело!

BOLK 2009

У нас со Спольски разные цели, ага :)

Илья Бирман 2009

Зачем мягкий знак?

Сергей М. 2009

Наверное, про отрицательные нули — это про три способа представления отрицательных чисел: прямой, обратный и дополнительный. Вот только используется именно дополнительный код — как Илья и описал.

Алик Кириллович 2009

Если вы читаете по-английски, я рекомедую всё же Сполского

Ну так, для тех, кто вдруг не читает по-английски, эта заметка есть и по-русски:

Во-первых, на русском «Joel on Software Translation Project»: http://local.joelonsoftware.com/wiki/Абсолютный_Минимум,_который_Каждый_Разработчик_Программного_Обеспечения_Обязательно_Должен_Знать_о_Unicode_и_Наборах_Символов

Во-вторых, в его книге «Джоэл о программировании».

В следующей книге «Джоэл: и снова о программировании» этой статьи уже нет.

Илья Бирман 2009

Джоел в переводе — это извращение.

Олег Французов 2009

Я знаю о вашей неприязни к букве «э», но почему всё-таки «Джоел»? По общим правилам «е» после гласной йотируется, а автора статьи про юникод зовут отнюдь не /джоjел/.

Илья Бирман 2009

Наверное, вы правы. Ну я как-то так уж пишу его :-)

BOLK 2009

У Спольски (не знаю почему мягкий знак, так привык и см. http://ru.wikipedia.org/wiki/Спольски) как обычно — много воды и истории, хотя написана она очень гладко, мне так ещё учиться. Я как раз пролистал статью.

Илья Бирман 2009

Я всегда писал Сполски, а после прочтения книжки про иностранные имена и названия, стал его ещё и склонять, как если бы он был «Сполский». Мягкому знаку совсем, кажется, неоткуда взяться. А ты его и произносишь так, с мягким л?.. :-/

Статья в Википедии — совсем левачная: там написано, что он преимущественно пишет о программировании под Виндоус :-)

Алексей 2009

!!1 бит информации — это такое её количество, которое уменьшает неопределенность в 2 раза.!!
Откуда взято определение?

Предположим я сказал собеседнику что мне 20 лет «просто так». Если он не задумывался над этим вопросом, то сколько бит информации я передал и какую неопределенность я уменьшил, и во сколько раз?
Собеседник думает: «В интервале от 0 до 49 ему 20 лет». Я передал ему ровно один бит информации = мне 20 лет. Интервал неопределенности у человека в голове, по твоей логике, влияет на количество информации которая переданна фразой «мне 20 лет».
Этой фразой я не передал 50 бит, уменьшив неопределенность «от 0 до 49» в 50 раз, а передал всего 1. Условие и ответ в битовом соотношении не связаны, это не шифр и не иероглиф.
Не важно как воспримется другим человеком ответ 42 «на главный вопрос жизни, вселенной и всего такого». Я этим ответом передал 1 бит.

Илья Бирман 2009

Ваши предтавления об одном бите вообще какие-то сногсшибательные.

Говоря человеку, что вам 20 лет, вы передаёте около 6 бит информации. Ну, если он вас не видит перед собой. А если видит — то 3-4 бита, не больше.

Алексей 2009

1 бит — огрубление. Мне тяжело дать точное значение, под этим я подразумевал какое-то конкретное число.

А как вы рассчитывали количество бит в случаях видит/не видит?

Илья Бирман 2009

Огрубление до полной утраты смысла, ага. Какое число под чем вы подразумевали я понять не могу.

Рассчитывал — очень просто. Человек, живёт сколько-то лет. Это число так или иначе близко к 64. Таким образом, называя конкретный возраст, вы уменьшаете неопределённость в 64 раза, и, стало быть, передаёте 6 бит информации. Возможно, чуть больше, но всяко меньше 7 бит, т. к. 128 лет не живут. Если же человек вас видит, то он может прикинуть, сколько вам лет, соответственно изначальная неопределённость поменьше.

Степан Легачёв 2009

Алексей, самое забавное случается тогда, когда люди начинают измерять свои фразы битами и байтами. Нелегко ведь спорить с тем, что рассказ Чехова на самом деле не «весит» 1200 байтов, а уменьшает неопределённость в стопицот раз :-)

BOLK 2009

Так и произношу, с мягким. Скорее всего, мягкий знак теряется именно при записи латиницей. Не зря же его все с мягким пишут и произносят, скорее всего его фамилия именно так и читается.

Илья Бирман 2009

Кто такие все? Я не слышал, чтобы его кто-то произносил с мягким, это же бред полный.

Фамилия американца не может читаться с мягким „л“ в принципе — такого звука нет в английком языке. В их подкасте его фамилия звучит, естественно, только с твёрдым „л“, нет никакого другого „л“.

BOLK 2009

Илья, 128 лет (и даже больше), конечно же живут. И прямо сейчас есть несколько долгожителей, переваливших за этот возраст.

BOLK 2009

Все вокруг меня. На столе у меня лежит книга, на ней написано «Джоэль Спольски». В английском она звучит без мягкого знака, но это ещё не значит, что человека зовут именно так. Т. е. от гражданства или места жительства звучание не меняется.

Максим 2009

Спольский — фамилия польского происхождения, и она должна писаться с мягким знаком. Пример: Лукаш Подольский, футболист сборной Германии.

Николай Товеровский 2009

Илья, так в e2 будет «hope of working with text in any language other than the subset of English that doesn’t include words with accents»?

Сергей Даровских 2009

Фамилия читается так, как захочет ее автор, тот же родившийся в Польше Лукаш Подольски всю жизнь живет в Германии и в собственном блоге называет себя Лукасом, даже когда пишет по-польски (т. е. со всей диакритикой).

Что касается JS, то мне тоже больше нравится «Джоэль Спольски». Насколько я могу судить, в русском согласная перед «-ски» в польских фамилиях чаще всего смягчается — см. того же Подольски.

Илья Бирман 2009

А почему считается, что фамилия польская? Любая согласная смягчается или только „л“? Спасибо.

Сергей Даровских 2009

А как иностранцы определяют, что Иванов — русская фамилия? :) Хотя, как минимум, в Болгарии она тоже очень распространена. Ну как-то по виду. Хотя, конечно, если человек американец в третьем поколении, то польское влияние на произношение фамилии будет минимальным.

А насчет смягчения — не знаю, я вот штук десять таких польских фамилий придумал, вроде бы смягчается только «л» (Брыльска, Подольски, Ковальски). А вот американский хоккеист Рафалски без всяких смягчений обычно пишется/произносится.

Илья Бирман 2009

Поколение я не знаю, а чувак при этом еврей вдобавок. Это что-нибудь меняет / добавляет? :-)

Сергей Даровских 2009

нет уж, с евреями сами разбирайтесь! )

BOLK 2009

Евреи каких только фамилий не брали, польские — в том числе. Кроме того, у евреев так хитро всё устроено, что ты среди евреев можешь считаться евреем, а среди русских — русским (а можешь и наоборот, это уже трагедия).

Илья Бирман 2009

Наоборот — это мой случай. В чём трагедия?

BOLK 2009

Сейчас (в наше поколение) антисемитизм, наверное, не так чувствуется, а вот мой друг (ему за 50), страдает от этого сильно: община евреев его за своего не признаёт, а антисемиты шипят сквозь зубы.

Илья Бирман 2009

Понятно.

Алексей 2009

Когда сидел на парах понял свои ошибки.
«1 бит уменьшает неопределнность в два раза» — это четвертое открытие, после 0^0=1, 0,(9)=1 и 0!=1.
Вообщем, спасибо Илья :-)

Мои книги