JavaRush /Курсы /Java Multithreading /Запись двоичного числа как 1000100В

Запись двоичного числа как 1000100В

Java Multithreading
10 уровень , 1 лекция
Открыта
Запись двоичного числа как 1000100В - 1

— Привет, Амиго!

— Привет, Билаабо!

Хочу рассказать тебе немного про различные системы счисления.

Ты уже слышал, что люди пользуются десятичной системой счисления. Вот главные факты этого подхода:

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. Тогда у нас есть восьмеричная система счисления и вот ее главные факты:

1) Для записи числа используются 8 цифр: 0,1, 2, 3, 4, 5, 6, 7.

2) Число 5438 значит 5*82+4*81+3*80Т.е. это 5*64+4*8+3*1 = 320+32+3=35510

Я написал снизу числа знаки 8 и 10, чтобы мы знали, сколько цифр используется для его записи.

— Вроде как и ясно. Я думаю, я бы смог перевести число из восьмеричной системы в десятичную. Но наоборот – вряд ли.

— Все не так уж и сложно. Представь, что тебе нужно перевести кучу песка на нескольких грузовых машинах. У тебя есть карьерные самосвалы, обычные, и совсем маленькие машинки. Но надо, чтобы машины не ехали полупустыми.

Как бы ты возил?

— Сначала я бы насыпал в карьерные самосвалы, они самые большие. Затем, когда понял, что для заполнения машины песка не хватит, то перешел бы на машины поменьше. Затем еще меньше.

— Тут все тоже очень похоже. Давай попробуем перевести число 35510 обратно в восьмеричный формат.

Сначала мы разделим его на 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

— Отличная лекция. Спасибо, Билаабо.

Комментарии (70)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Zim4ik Уровень 51
4 августа 2025
2025
14 августа 2025
Люююди, живые люди!!!!
Denis Odesskiy Уровень 47
22 июля 2024
Все приличные роботы пользуются двоичной системой, пора бы тебе знать, Амиго...😄 П\С: Карикатура зачётная: галера, рабы, выключенный вай-фай, готовят так сказать к трудовым будням, видно конец курса не за горами...😄
Anton Rahm Уровень 31
21 февраля 2023
тема отрицательных чисел в двоичной системе не раскрыта там есть определяющий бит
G Уровень 41 Expert
3 февраля 2023
лучше бы вместо информатики за восьмой класс примеров проектов готовых или паттернов накинули бы
Igor Petrashevsky Уровень 47
3 августа 2022
это не лекция, это информатика за 8й класс. но на нее хлопнули всю последнюю главу квеста, хотя это доквестивание вообще. и маски в каком-то квесте уже утюжили. тратить по 30 материи на это
SERGEY Уровень 31
1 июня 2022
Я бл* так и не понял как они из десятичной восьмеричную получили ХD. Может кто-то мне объяснит откуда при делении 355 на 64 мы получили остаток 35 🤷‍♂️
SERGEY Уровень 31
1 июня 2022
Разобрался, мозг мне запутали
Рыбалко Иван Уровень 36
26 февраля 2022
стажировка джавараш если ссылка не работает - напишите мне!
Тимофей Уровень 51
22 февраля 2022
Студенты технари прослезились
hidden #2595317 Уровень 45
23 января 2022
Главные факты подхода.)))
LuneFox Уровень 41 Expert
28 ноября 2021
Вот уж не ожидал эту тему увидеть в последней лекции) Фундамент закладывать после постройки стен - гениально) P. S. Все системы счисления работают одинаково, не нужно «учить», как работает двоичная, восьмеричная, шестнадцатеричная, и т. д. Главное - осознать принцип, по которому увеличиваются разряды, и вы сможете записать число хоть в двадцати-семиричной системе, хоть в сто-семьдесят-шестеричной, главное только символы разные найдите. Интересно, а как выглядела бы единичная система счисления? Максимум, что могу придумать: 0 = 1 00 = 2 000 = 3 0000 = 4 … 0000000000000000 = 16, и т. д. Вот только разделять числа нечем, введём пробел - вернёмся к «странной» двоичной системе) P. P. S. А вот последняя табличка оказалась полезной.
Lt_Den Уровень 34
2 декабря 2021
Для единичной системы можно, как в счетах добавить точку и тогда боле менее заработает: 4135 - 0000.0.000.00000 ))
LuneFox Уровень 41 Expert
2 декабря 2021
Нельзя, потому что получится та самая "странная" двочиная система, состоящая из нулей и точек) С тем же успехом можно разделить нули единичками.
Ренат Уровень 39
1 августа 2022
Но ведь Ваша единичная система счисления — то же самое, что и унарная
LuneFox Уровень 41 Expert
1 августа 2022
Кстати, я тоже неправ, потому что 4135 должно записываться четыремя с лишним тысячами нулей, а тут получается мы десятичные разряды записываем унарно через точку. Почему не восьмеричные или шестнадцатеричные, например?