Допустим, у нас есть сообщение «habr», которое необходимо передать без ошибок. Для этого сначала нужно наше сообщение закодировать при Кода Хэмминга. Нам необходимо представить его в бинарном виде.На этом этапе стоит определиться с, так называемой, длиной информационного слова, то есть длиной строки из нулей и единиц, которые мы будем кодировать. Допустим, у нас длина слова будет равна 16. Таким образом, нам необходимо разделить наше исходное сообщение («habr») на блоки по 16 бит, которые мы будем потом кодировать отдельно друг от друга. Так как один символ занимает в памяти 8 бит, то в одно кодируемое слово помещается ровно два ASCII символа. Итак, мы получили две бинарные строки по 16 битбит. распараллеливается, и две части сообщения («ha» и «br») кодируются независимо друг от друга. Рассмотрим, как это делается на примере первой части.
Прежде всего, необходимо вставить контрольные биты. Они вставляются в строго определённых местах — это позиции с номерами, равными степеням двойки. В нашем случае (при длине информационного слова в 16 бит) это будут позиции 1, 2, 4, 8, 16. Соответственно, у нас получилось 5 контрольных бит (выделены красным цветом)Таким образом, длина всего сообщения увеличилась на 5 бит. До вычисления самих контрольных бит, мы присвоили им значение «0».
1. ответ: 100001000₂
11001101₂ + 111011₂ = (2⁷*1 + 2⁶*1 + 2⁵*0 + 2⁴*0 + 2³*1 + 2²*1 + 2¹*0 + 2⁰*1) + (2⁵*1 + 2⁴*1 + 2³*1 + 2²*0 + 2¹*1 + 2⁰*1) = (128 + 64 + 0 + 0 + 8 + 4 + 0 + 1) + (32 + 16 + 8 + 0 + 2 + 1) = 205₁₀ + 59₁₀ = 264₁₀ = 100001000₂
Перевод 264₁₀ в 2-ю СС (mod - остаток от деления; каждый раз число делим на 2):
264 mod 2 = 0
132 mod 2 = 0
66 mod 2 = 0
33 mod 2 = 1
16 mod 2 = 0
8 mod 2 = 0
4 mod 2 = 0
2 mod 2 = 0
1 mod 2 = 1
Остаток от деления записываем в обратном порядке. Получается: 100001000₂.
2. ответ: сума двух чисел - 100110010₂, а разность двух остальных- 1011011₂.
10011001₂ = 2⁷*1 + 2⁶*0 + 2⁵*0 + 2⁴*1 + 2³*1 + 2²*0 + 2¹*0 + 2⁰*1 = 128 + 0 + 0 + 16 + 8 + 0 + 0 + 1 = 153 ₁₀
10011001₂ (153₁₀) + 153₁₀ = 153₁₀ + 153₁₀ = 306₁₀
11011001₂ = 2⁷*1 + 2⁶*1 + 2⁵*0 + 2⁴*1 + 2³*1 + 2²*0 + 2¹*0 + 2⁰*1 = 128 + 64 + 0 + 16 + 8 + 0 + 0 + 1 = 217 ₁₀
217 ₁₀ - 126₁₀ = 91₁₀
Переводим 306₁₀ в 2-ю СС (mod - остаток от деления; каждый раз число делим на 2):
306 mod 2 = 0
153 mod 2 = 1
76 mod 2 = 0
38 mod 2 = 0
19 mod 2 = 1
9 mod 2 = 1
4 mod 2 = 0
2 mod 2 = 0
1 mod 2 = 1
Остаток от деления записываем в обратном порядке. Получается: 100110010₂.
Переводим 91₁₀ в 2-ю СС (mod - остаток от деления; каждый раз число делим на 2):
91 mod 2 = 1
45 mod 2 = 1
22 mod 2 = 0
11 mod 2 = 1
5 mod 2 = 1
2 mod 2 = 0
1 mod 2 = 1
Остаток от деления записываем в обратном порядке. Получается: 1011011₂.
Объяснение:
Допустим, у нас есть сообщение «habr», которое необходимо передать без ошибок. Для этого сначала нужно наше сообщение закодировать при Кода Хэмминга. Нам необходимо представить его в бинарном виде.На этом этапе стоит определиться с, так называемой, длиной информационного слова, то есть длиной строки из нулей и единиц, которые мы будем кодировать. Допустим, у нас длина слова будет равна 16. Таким образом, нам необходимо разделить наше исходное сообщение («habr») на блоки по 16 бит, которые мы будем потом кодировать отдельно друг от друга. Так как один символ занимает в памяти 8 бит, то в одно кодируемое слово помещается ровно два ASCII символа. Итак, мы получили две бинарные строки по 16 битбит. распараллеливается, и две части сообщения («ha» и «br») кодируются независимо друг от друга. Рассмотрим, как это делается на примере первой части.
Прежде всего, необходимо вставить контрольные биты. Они вставляются в строго определённых местах — это позиции с номерами, равными степеням двойки. В нашем случае (при длине информационного слова в 16 бит) это будут позиции 1, 2, 4, 8, 16. Соответственно, у нас получилось 5 контрольных бит (выделены красным цветом)Таким образом, длина всего сообщения увеличилась на 5 бит. До вычисления самих контрольных бит, мы присвоили им значение «0».