Биты, представляющие значения, не обязательно идентичны, если присутствуют биты заполнения, но идентичны, если нет битов заполнения.
C 2018 6.2.6.2 2 говорит о целочисленных типах со знаком:
Каждый бит, который является битом значения, должен иметь то же значение, что и тот же бит в представлении объекта соответствующего типа без знака…
Таким образом, биты значения в целочисленном типе со знаком совпадают с битами значения в соответствующем типе без знака. Остается рассмотреть еще три набора битов:
- Бит знака.
- Биты значения, которые имеют тип без знака, но не имеют тип со знаком.
- Заполнение биты.
Знаковый бит должен быть равен нулю, поскольку в этом параграфе также говорится:
… Если знаковый бит равен нулю, он не должен влиять на результирующее значение. Если бит знака равен единице, значение должно быть изменено одним из следующих способов:…
Эти «следующие способы» (знак и величина, дополнение к двум, дополнение к двум) приводят к отрицательные значения, если значение не равно нулю. Поскольку нам говорят, что представленное значение является положительным, оно не является отрицательным, и поэтому бит знака должен быть нулевым. (Следует отметить, что в вопросе утверждается, что значение положительное, исключая, таким образом, ноль. С помощью знака и величины или дополнения ноль может быть представлен знаковым битом, равным единице, и, таким образом, он может иметь биты, отличные от целого числа без знака ноль, который имеет все нулевые биты.)
Любые значения битов, которые существуют в типе без знака, но не в типе со знаком, должны быть равны нулю, так как значение одинаково в обоих типах.
То есть биты заполнения, и это - то, где соответствие терпит неудачу. Значения битов заполнения не определены стандартом C и поэтому могут различаться между типом со знаком и без знака или даже между двумя экземплярами одного и того же значения в одном и том же типе. Определенная реализация c C может, конечно, определять свои биты заполнения так, чтобы подписанные и неподписанные типы с одним и тем же значением всегда имели одинаковые биты заполнения, и чтобы биты заполнения соответствовали между типами со знаком и без знака. (Можно представить, что бит знака в типе со знаком соответствует биту заполнения в типе без знака вместо бита значения.)
C 1999 имеет ту же формулировку.