Хэмминг вычислил, что если у нас есть кодовое слово

длиной

, и от кода требуется гарантированное исправление одной ошибки, то из

символов кодового слова необходимо назначить проверочными по крайней мере

символов. Потому что принятое слово

должно нести информацию не только о переданном сообщении, но и о месте ошибки (

вариантов), либо о том, что ошибки нет (

вариант), всего

вариантов, а это

символов. Но как выбрать их позиции в кодовом слове (ещё на этапе разработке кодера/декодера)?
Допустим, мы кодируем с помощью матрицы

из примера 14. Предположим, что мы решили символы

назначить информационными (то есть на этапе кодирования они известны), а символы

сделать проверочными (их надо найти из информационных). Распишем матричное уравнение

:



Смотрите, как плохо получается: ни одну из неизвестных

нельзя найти из уравнений
непосредственно, потому что в каждое уравнение входит ещё по крайней мере одна неизвестная.
Зато, если считать проверочными

, их можно вычислить из уравнений непосредственно:



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

, которая легко обращается:

А в каждом столбце

ровно одна единица (хотя в данном случае простота разрешимости системы — следствие того, что в каждой
строке 
ровно одна единица). Что и даёт степень двойки при «двоичной» трактовке

.