Курс Java Multithreading — Лекция: Запись двоичного числа как 1000100В
— Привет, Амиго!
— Привет, Билаабо!
Хочу рассказать тебе немного про различные системы счисления.
Ты уже слышал, что люди пользуются десятичной системой счисления. Вот главные факты этого подхода:
1) Для записи числа используются 10 цифр: 0,1, 2, 3, 4, 5, 6, 7, 8, 9.
2) Число 543 значит 5 сотен + 4 десятка + 3 единицы.
Эта равносильно записи 5*100 + 4*10 + 3*1, что можно записать как 5*102+4*101+3*100
Обрати внимание – тысячи, сотни, десятки и единицы – это степени числа 10.
1) Единица – это 10 в нулевой степени.
2) Десять – это 10 в первой степени
3) Сто – это 10 во второй степени
4) Тысяча – это 10 в третьей степени и т.д.
— Ага. Понятно.
— А теперь представь, что цифр всего 8. Тогда у нас есть восьмеричная система счисления и вот ее главные факты:
2) Число 5438 значит 5*82+4*81+3*80. Т.е. это 5*64+4*8+3*1 = 320+32+3=35510
Я написал снизу числа знаки 8 и 10, чтобы мы знали, сколько цифр используется для его записи.
— Вроде как и ясно. Я думаю, я бы смог перевести число из восьмеричной системы в десятичную. Но наоборот – вряд ли.
— Все не так уж и сложно. Представь, что тебе нужно перевести кучу песка на нескольких грузовых машинах. У тебя есть карьерные самосвалы, обычные, и совсем маленькие машинки. Но надо, чтобы машины не ехали полупустыми.
Как бы ты возил?
— Сначала я бы насыпал в карьерные самосвалы, они самые большие. Затем, когда понял, что для заполнения машины песка не хватит, то перешел бы на машины поменьше. Затем еще меньше.
— Тут все тоже очень похоже. Давай попробуем перевести число 355 10 обратно в восьмеричный формат.
Сначала мы разделим его на 64 (82), получим 5 целых и 35 в остатке. Значит первая цифра нашего числа – 5. Затем разделим остаток на 8(81), получим 4 и 3 в остатке. Так и получится число 5438.
Можно, кстати, пойти и с другой стороны. Ведь 5438 ==5*64+4*8+3 == ((5)*8+4)*8+3. Наши восьмеричные «десятки» и «сотни» обязательно делятся на 8. Значит, остаток от деления на 8 это и будут наши восьмеричные единицы.
Поделим сначала число 355 на 8. Получим 44 и 3 в остатке. Т.е. 355=44*8+3. А 44 можно представить как 5*8+4. Значит 355= (5*8+4)*8+3; Вот наши цифры: 5,4,3. Искомое число 5438
— В общем вроде понятно, но надо немного попрактиковаться, чтобы окончательно во всем разобраться.
— В программировании очень часто используются числа с различным основанием (количеством цифр). Самые популярные – это 2, 8, 10, 16, 64.
— А зачем это нужно. Зачем нужны числа, состоящие из 2, 8, 16 и 64 цифр?
— Дело во внутреннем устройстве процессора. Очень упрощенно — если в проводе есть ток, то говорят, что в нем «единица», если тока нет, то в нем «ноль». Все числа хранятся в памяти в виде ячеек. Устройство таких ячеек очень примитивно. Они тоже могу хранить только 0 или 1.
Зато такое упрощение всего (только 0 или 1) дало возможность сделать элементы внутри процессора и памяти очень маленькими. Современные процессоры и модули памяти включают миллиарды различных элементов. При том, что их площадь зачастую не превышает квадратного сантиметра.
— Ничего себе. Буду знать.
— Теперь перейдем к двоичным числам. Там то же самое, что и с восьмеричными, только еще проще.
1) Для записи числа используются 2 цифры: 0,1
2) Число 1012 значит 1*22+0*21+1*20. Т.е. это 1*4+0*2+1*1 =4+1=510
— Да. Я помню. Одна ячейка, которая принимает значение 0 или 1 называется битом. Но т.к. в ней можно сохранить очень мало информации, то их объединяют в группы по 8. И называют такую группу – байтом.
— Именно. Байт – это группа из восьми бит. В нем можно хранить значения: 00000000, 00000001, …, 11111111. Которые соответствуют десятичным 0,1,… 255. Всего 256 значений.
Какое самое большое целое число в Java? Вернее его тип?
— long. long состоит из 8 байт. Т.е. 64 бита и может хранить значения от -263 до 263-1
— Ага. Я не буду касаться темы, как переводить числа из десятичной системы в двоичную или наоборот. Иначе лекция слишком затянется.
Давай лучше еще немного расскажу про 16-ричную систему счисления.
— Да, очень интересно. Для двоичной и восьмеричной систем мы просто выкинули цифры начиная с двойки или восьмерки. А тут как? Мы добавим новые цифры?
— Именно! Смотри:
1) Для записи числа используются 16 цифр: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
2) Число 54316 значит 5*162+4*161+3*160. Т.е. это 5*256+4*16+3*1 =1280+64+3=134710
— Т.е. мы просто добавили буквы в качестве цифр? О_о
— Ага. А что в этом такого? Зачем придумывать новые цифры, когда с этой ролью отлично справляются буквы. Вот смотри:
Шестнадцатеричная цифра | Десятичное значение |
---|---|
0 | 0 |
1 | 1 |
8 | 8 |
9 | 9 |
A | 10 |
B | 11 |
C | 12 |
D | 13 |
E | 14 |
F | 15 |
Про перевод из десятичной системы в шестнадцатеричную тоже рассказывать не буду. Зато есть один интересный факт. Шестнадцатеричная цифра – это ровно 4 бита со значениями от 0 до 15. Поэтому один байт можно записать восемью двоичными цифрами (0 или 1) или двумя шестнадцатеричными.
Пример:
Десятичное число | Двоичное число | Шестнадцатеричное число |
---|---|---|
0 | 0000 0000 | 00 |
1 | 0000 0001 | 01 |
15 | 0000 1111 | 0f |
16 | 0001 0000 | 10 |
31 | 0001 1111 | 1f |
32 | 0010 0000 | 20 |
128 | 1000 0000 | 80 |
129 | 1000 0001 | 81 |
255 | 1111 1111 | ff |
Шестнадцатеричное представление легко приводится к двоичному (и обратно). Поэтому, если где-то в программировании нужно показать именно внутреннее байтовое представление числа, то очень редко прибегают к двоичной записи через 0 и 1. Слишком длинно и не понятно. Шестнадцатеричная запись гораздо читабельней и компактней.
— Согласен. Даже мне понравилось.
— Кстати, в Java можно прямо в коде записывать числа в различных системах счисления:
Основание | Отличительный признак | Примеры | Неправильные числа |
---|---|---|---|
2 | 0b в начале числа | 0b00001111 | 0b1111121 |
8 | 0 в начале числа | 01234343 | 0128 |
10 | нет | 95459 | 909a |
16 | 0x в начале числа | 0x10ff | 0x1cgh |
— Отличная лекция. Спасибо, Билаабо.
Системы счисления
Кодирование информации — представление информации в той или иной стандартной форме.
Например, письменность и арифметика — кодирование речи и числовой информации, музыку кодируют с помощью нот.
Чтобы использовать числа их нужно как-то записывать и называть.
Самые первые системы нумерации возникли в древнем Египте и Месопотамии — применяли иероглифы.
Системы счисления — способы кодирования числовой информации, то есть способ записи чисел с помощью некоторого алфавита, символы которого называют цифрами.
В древнем Вавилоне делили час на 60 минут, угол на 360 градусов, англосаксы начали делить год на 12 месяцев, сутки на два периода по 12 часов, продолжительность года 360 суток.
В Риме семь чисел обозначают буквами. 1-I, 5-V, 10-X, 50- L,100-C, 500-D, 1000-M.
IV (4=5-1)
VI (6=5+1)
Значение числа определяется как сумма или разность цифр числа. Это непозиционная система счисления.
Славяне числа кодировали буквами А=1, В=2, Г=3; чтобы избежать путаницы ставился специальный знак ~ титло. Алфавитная система счисления. Славянская нумерация сохранялась до конца XVII века.
При Петре I возобладала так называемая арабская нумерация. Славянская нумерация сохранилась в богослужебных книгах.
Самой популярной системой кодирования чисел оказалась позиционная, десятичная. Используются десять цифр. Значение каждой определяется той позицией, которую цифра занимает в записи числа.
Эта система пришла из Индии, где она появилась не позднее VI века, европейцы заимствовали ее у арабов, назвав ее арабской. Из арабского языка заимствовано слово «цифра». Причина ее возникновения анатомическая — 10 пальцев. Анатомическая система счисления (существовали пятеричные, двадцатеричные системы счисления).
Например, 23 — три единицы, два десятка 32 — две единицы, три десятка 400 — 4 сотни, два 0 вклад в число не дают, нужны для того, чтобы указывать позицию 4.
В десятичной позиционной системе особую роль играет число 10 и его степени, например, 1996 — 6 единиц, 9 десятков, 9 сотен 1 тысяча или 1996=6+9*10+9*100+1*1000, т. к.1000=103, 100=102, 10=101, таким образом, 1996=1*103 + 9*102 + 9*101 +6*100.
Любое число в нулевой степени равно единице 0,10 = 1
То есть любое 4-х значное число можно записать в следующем виде:
N=a3*103+a2*102+a1*101+a0*100
a3, a2, a1, a0-десятичные цифры, от 1 до 9 или коэффициенты 3 2 1 0 — разряды, степени числа 10 со степенями называют основанием системы счисления.
Но основанием системы может быть не обязательно число 10, мы можем записать число в р-ичной системе, где основанием будут степени числа р. Любое число N в р-ичной системе мы можем представить в виде формулы:
N=an*Pn+an-1*Pn-1+…+a1*P1+a0*P0
Если взять за основание 60, то придется использовать 60 разных цифр. Такая система была в Древнем Вавилоне. Если основанием возьмем 2, получим систему всего с двумя цифрами 0 и 1. К сожалению, в этой системе даже небольшие числа записываются слишком длинно, так 1995 в двоичной системе записывается 199510=111110010112
Система счисления, где 2 является основанием системы называется двоичной системой счисления, относится к машинной системе счисления, к машинным системам счисления относятся и восьмеричная и шестнадцатеричная. Таким образом существуют следующие системы счисления: вавилонская, римская, алфавитные, анатомические, машинные.
Системы счисления делятся также на позиционные и непозиционные.
Перевод из двоичной системы счисления в десятичную.
Как узнать чему равно девятизначное двоичное число N=1111101002
Подпишем сверху каждый разряд
87654321010 — 1 разряды (степени двойки)
1111101002
В двоичной системе особую роль играет двойка и ее степени.
Таким образом:
111110100=1*28 +1*27 +1*26 +1*25 +1*24 +0*23 +1*22 +0*21 +0*20 =1*256+1*128+1*64 +1*32 +1*16 +0*8 +1*4 +0*2 +0*1=256 + 128 + 64 + 32 + 16 + 0 + 4 + 0 +0 =500
Перевод из десятичной системы счисления в двоичную.
Пусть нужно перевести в двоичную систему число 234. Будем делить 234 последовательно на 2 и запоминать остатки, не забывая про нулевые.
Выписав все остатки, начиная с последнего 3 в обратном порядке, получим двоичное разложение числа.
23410 = 111010102
Восьмеричная и шестнадцатеричная системы счисления.
Запись числа в двоичной системе удобна для компьютера, но громоздка для человека. На помощь приходят системы, родственные двоичной восьмеричная система счисления использует 8 цифр: 0,1,2,3,4,5,6,7.
Единица, записанная в самом младшем разряде означает просто единицу (1*8 в нулевой степени), та же единица в следующем разряде обозначает 8 (1*8 в первой степени), в следующем 64 (1*8 во второй степени) и так далее.
2 1 0 1 — разряды (степени восьмерки)
1008 = 1*82 + 0*81 + 0*80 = 1*64 + 0 + 0 = 6410
8 — это 2 в третьей степени. При переводе в восьмеричную систему двоичное число из трех цифр записывается одной цифрой.
Восьмеричная запись |
Двоичное представление |
впереди стоящий 0 ничего не значит |
0 |
000 |
|
1 |
001 |
|
2 |
010 |
|
3 |
011 |
|
4 |
100 |
|
5 |
101 |
|
6 |
110 |
|
7 |
111 |
Для перевода из двоичной в восьмеричную число, записанное в двоичной системе делим на триады справа налево
Например, 11011100011=11 011 100 011 и заменить каждую группу одной восьмеричной цифрой 2 2 4 2 и получим 22428
Для перевода числа из восьмеричной системы в двоичную достаточно заменить каждую цифру на ее перевод в двоичную систему, представив каждую цифру в виде триады (1 в двоичной системе 1 добавляем до триады впереди 00)
6 |
1 |
1 |
110 |
001 |
001 |
Еще компактней выглядит запись двоичного числа в шестнадцатеричной системе счисления.
Для первых 10 из 16 шестнадцатеричных цифр используются привычные цифры 0 1 2 3 4 5 6 7 8 9, а для остальных используют первые буквы латинского алфавита
A-10 D-13
B-11 E-14
C-12 F-15
Цифра 1 в самом младшем разряде означает 1, в следующем разряде означает 16 (в первой степени), в следующем разряде 16*16 (162)=256, в следующем разряде 1*163 и так далее.
10016 =25610
Цифра F, записанная в самом младшем разряде означает 15 в десятичной системе, F в следующем разряде означает 15*16 в первой степени в десятичной системе и т.д.
2 1 0 — 1 разряды (степени числа 16)
Число 21016=10*162+15*161+0*160
21016=10*256+240+0*1=2560+240+0=280010
2 1 0
BAD16=11*162+1 0*161+13*1 60 = 11 * 256+10 *16+13*1=2816+160+13=298910
16 — это 2 в четвертой степени. При переводе из двоичной системы в шестнадцатеричную число двоичное число из 4-х цифр кодируется числом из одной цифры в шестнадцатеричной системе.
Для перевода числа из шестнадцатеричной системы в двоичную достаточно заменить каждую цифру на ее перевод в двоичную, представив каждую цифру в виде сочетания четырех 1 и 0
A |
O |
F |
AOF16 |
1010 |
0000 |
1111 |
Как осуществить перевод чисел из двоичной системы в шестнадцатеричную? Необходимо разбить число, записанное в двоичной системе на группы по 4 разряда справа налево, заменив каждую группу одной шестнадцатеричной цифрой.
1101 |
1010 |
1101 |
в двоичной |
11 |
10 |
13 |
в десятичной |
B |
A |
D |
в шестнадцатеричной |
10 |
2 |
8 |
16 |
0 | 000 | 0 | 0 |
1 | 001 | 1 | 1 |
2 | 010 | 2 | 2 |
3 | 011 | 3 | 3 |
4 | 100 | 4 | 4 |
5 | 101 | 5 | 5 |
6 | 110 | 6 | 6 |
7 | 111 | 7 | 7 |
8 | 1000 | 10 | 8 |
9 | 1001 | 11 | 9 |
10 | 1010 | 12 | A |
11 | 1011 | 13 | B |
12 | 1100 | 14 | C |
13 | 1101 | 15 | D |
14 | 1110 | 16 | E |
15 | 1111 | 17 | F |
Ten Zero (Фанфик) — TV Tropes
http://tvtropes. org/pmwiki/pmwiki.php/fanfic/tenzero
Перейти к
Ten Zero — это фанфик от Flameal15k. Это кроссовер между Warframe и Code Geass .
Лелуш ви Британия был полон решимости разрушить империю своего отца. Но большинство не ожидало, что ему помогут из совершенно другой вселенной….
Это можно прочитать на Spacebattles, Sufficient Velocity и Fanfiction.net.
- Адаптационный героизм: в сериале подразумевается, что отец Ширли был членом Code R, а новеллизация подтверждает это и показывает, что он был высокопоставленным исследователем. Здесь этот был случаем, но позже он перешел на сторону Лелуша и теперь помогает изгнанному принцу с его планом по уничтожению Британии.
- Адаптационное изменение контекста: в каноне, во время разговора Лелуша и Кики в «Принцессе и ведьме», заверения Кики, что она не предаст Лелуша из-за их нового партнерства, зависит исключительно от ее слова.
Здесь ее уверенность также связана с тем фактом, что Человек в стене прямо сообщил ей, что будет добиваться возмездия, если она навредит Лелушу.
- Адаптационное изменение личности: C.C. в этой истории она кажется более эмоциональной и напуганной, чем в каноническом Code Geass. Это оправдано тем фактом, что до сих пор в большинстве ее сцен она взаимодействует с Человеком в Стене, чья чуждая природа быстро разрушает ее спокойный характер.
- Дистилляция адаптации: события Deadlock Protocol уже были обработаны к тому времени, когда происходит эта история, но не события Scarlet Spear, хотя последнее было выпущено до прежней IRL. Однако расположение перекрестков в игре подразумевает, что действие протокола Тупик происходит через некоторое время после Второго Сна, но до Жертвоприношения.
- Расширение адаптации: второстепенный пример: во время допроса Сузаку Иеремия спрашивает первого, видел ли он недавно Лелуша или Наннелли, поскольку маркграф сомневается, что Лелуш мертв, и знает, что семья Сузаку воспитывала братьев и сестер Ви Британия.
- Адаптация: заговор Чистокровных убить Иеремию, чтобы искупить свою вину после инцидента с апельсином, никогда не происходит здесь, среди прочего, из-за того, что Лелуш пощадил Хлодвига и предложил Третьего принца и «ядовитый газ» в обмен на Сузаку, а также как утечка кода R для публики, что заставляет пуристов предположить, что чем бы ни был «Апельсин», это то, что лучше всего оставить в секрете … по крайней мере, на данный момент.
- Birds of a Feather: Рубен Эшфорд подружился с Вилкором Энтрати и его слугами-некралоидами Лойдом и Отаком из-за их общего интереса к Мехе.
- Принеси мои коричневые штаны: Сестра Лелуша Гвиневра столкнулась с этим после того, как она оказалась не на том конце Лелуша, используя Севагота, чтобы использовать ее страх перед призраками, поместив ее в реальную историю о привидениях.
- Битва на бордюре: Каждый раз, когда Тэнно вступает в драку с Муками, это обычно заканчивается тем, что последние оштукатуривают пол и стены.
- Драматическая ирония: Предполагая, что каноническая предыстория СиСи все еще жива, она заключила контракт с Лелушем, чтобы найти способ покончить со своим бессмертием и уйти.
.. не подозревая, что здесь Лелуш на самом деле старше ее. Намного, намного , гораздо старше ее.
- Опытный главный герой: К тому времени, когда начинается история, Лелуш и Наннелли уже выполнили все текущие сюжетные квесты в Warframe, то есть они сражались с Гринир, Корпусом, Зараженными, Зараженными и Разумные не менее шести лет. Word of God говорит, что они выполнили все квесты, но события Алого Копья еще не произошли.
- Операция под ложным флагом: импровизированная на лету Лелушем во время «Эха Темпестарий» — когда он узнает, что группа антибританских повстанцев, которые занимаются этим только ради денег, находятся в том же районе, что и устройство, которое ему нужно украсть, он подставляет их для отвлекающей атаки, организовав это так, чтобы взрыв заставил рыцарскую полицию увидеть указанных наемников сразу после того, как Рай и Каллен уничтожили контрольно-пропускной пункт британского военно-морского флота, что привело к перестрелке, которая отвлекает обе стороны от Настоящая цель Лелуша.
- Из-за отсутствия гвоздя:
- Из-за того, что Лелуш немного повзрослел и стал Адаптационным Приятным Парнем, Хлодвига похищают, а не убивают.
- Вышеупомянутое также избавляет Иеремию от его канонического невезения, поскольку Зеро предлагает обменять Хлодвиг на Сузаку, создавая впечатление, что Оранжевый что-то важное для принца. Слово Божье подтверждает, что Иеремия получит только одно понижение в должности, потому что он действовал разумно, но Хлодвиг потерялся на его часах.
- Лелуш раскрывает общественности Кодекс R, который массовым образом дестабилизирует британский режим в Зоне 11. компрометируя и без того пошатнувшуюся репутацию Хлодвига.
- Лелуш все еще заключает контракт с C.C.
- Кловис решает уничтожить Синдзюку, хотя нет никаких доказательств того, что силы Лелуша взяли туда ядовитый газ.
Он оправдывает это тем, что нападение на Синдзюку может выманить рейдеров на открытое пространство.
- Каллен и Нагата в конце концов находят один из грузовиков, которые силы Лелуша использовали для набега на объект Code R, и в конечном итоге их преследуют силы Хлодвига. Лелуш, в свою очередь, оказывается в грузовике, когда тот снова чуть не врезается в него и Ривалза,
- Иеремия по-прежнему обвиняет Сузаку в причастности к смерти Хлодвига (или похищению, в зависимости от обстоятельств).
Деление на ноль
Не делить на ноль, иначе может случиться такое!
Шучу. |
|
По правде говоря:
Деление на ноль равно undefined .
Разделение
Чтобы понять почему, давайте посмотрим, что подразумевается под «делением»:
Дивизия делится на равные части или группы.
Это результат «честного обмена».
Пример: есть 12 шоколадок, и 3 друга хотят их разделить, как они поделят шоколадки?
12 конфет | 12 конфет разделить на 3 |
---|
Таким образом, они получают по 4: 12/3 = 4
Деление на ноль
Теперь давайте попробуем разделить 12 шоколадок между нулями человек, сколько получит каждый человек?
Этот вопрос вообще имеет смысл? Нет, конечно.
Мы не можем разделить между ноль людей, и мы не можем разделить на 0.
Еще одна веская причина
Можем ли мы после деления умножить, чтобы получить обратно?
Но умножение на 0 дает 0, так что это не сработает.
И снова деление на ноль вызывает у нас затруднения!
Представьте, что мы можем разделить на ноль
Хорошо, давайте представим мы можем поделить на ноль и посмотрим, что получится.
Это означает, что такие числа, как 1 0 и 0 0 , будут вести себя как обычные числа.
Попробуйте умножить на ноль
Давайте попробуем использовать наши новые «числа».
Например, мы знаем, что ноль умножить на любое число равно нулю:
Пример: 0×1 = 0, 0×2 = 0 и т. д.
То же самое должно быть верно и для 1 0 :
0 × 1 0 = 0
Но мы могли бы также изменить его немного так:
0 × 1 0 = 0 0 × 1 = 1
(Осторожно! Я , а не , говоря, что это правильно! Мы , предполагая , что мы можем делить на ноль, поэтому 0 0 должно работать так же, как 5 5, ).