まだ言及されていない点は、整数表現にパディング ビットが含まれる可能性が標準で明示的に許可されていることです。個人的には、標準化委員会が、プログラムが特定の予想される動作を指定する簡単な方法を許可し、コンパイラがそのような仕様を尊重するか、コンパイルを拒否する必要があることを望んでいます。「整数にパディング ビットを含めてはならない」という仕様で始まったコードは、それが事実であると仮定する資格があります。
そのままでは、35 ビット値を 4 つの 9 ビット文字としてビッグエンディアン形式で格納することは (奇妙ではありますが) 完全に正当long
ですが、最初のバイトの LSB をパリティ ビットとして使用します。このような実装では、1
a に格納するlong
と、ワード全体のパリティが奇数になる可能性があるため、実装で a1
をパリティ ビットに格納する必要があります。
確かに、そのような動作は奇妙ですが、パディングを使用するアーキテクチャが標準の明示的な規定を正当化するのに十分に注目に値する場合、そのようなアーキテクチャで壊れるコードは、本当に「移植可能」とは見なされません。
使用するコードunion
は、単純に「ビッグ エンディアン」または「リトルエンディアン」と記述でき、パディング ビットを使用しないすべてのアーキテクチャで正しく動作するはずです。他のいくつかのアーキテクチャでは意味がありません (実際、「ビッグエンディアン」と「リトルエンディアン」という用語も意味がない可能性があります)。