プログラミング言語C-演算子、共用体

津路です。

久しぶりに、プログラミング言語C 第2版 ANSI規格準拠(K&R)を読んでみました。
改めて読んでみると、使わなくなった機能があったり、訳が変だなあと思う個所があったしたので、投稿します。

あまり使わなくなった機能
1.単項演算子のチルダです。
ビットを反転するわけですが、C++を常用してユーザアプリを作るようになって、ビット演算をほとんど使わなくなってます。
2章9節に、ビットごとの論理演算子として、以下のように説明されています。
「チルダは、整数の1の補数を求めるのに使われる。これでは 1 の各ビットは 0 に、0 は 1 に反転される。
この演算子は、次のような式でよく使われる。

x = x & ~077

これは x の下 6 ビットを 0 にする意味を持つ。注意すべきは、x & ~077 が語長とは独立であり、x を 16 ビット量と仮定して、例えば x & 0177700 と書くよりは好ましいということである。」
077 は、0から始まり 8 進です。ビット表現では、111 111 ですので、これを反転して、x との AND をとると、下 6 ビットが反転します。
「語長とは独立であり」とはどういう意味なのでしょうか?
英語では、「is independent of word length」なので、x のビット量(数?)に依存しない書き方という意味のようです。語長という表現が、私にはわかりにくかったです。

2.共用体
union ですが、これは、始めて勉強したときには取っつきにくい体でした。
用途は、メモリ節約です。
ユーザメモリが限られている場合に、いろんな型で使うにはよい構造体の変形とでも言いましょうか?
構造体では、各変数がそれぞれ別のメモリを住み分けて使いますが、union では、同時に一つの型しか使えません。
引き出しに例えると、一つの引き出しをいろんな形のもので共用するけど、一度には一つしか入らない、というような。。
同時に一つの型しか使えないというのは、要するにどのメンバーに値を割り当てても、そのうちの一つの値しか取り出せない、そして、どのメンバーとしてアクセスしても、先頭のメモリアドレスはすべて同じです。
そこで、6章8節の以下の文章を読むと変でした。
「これが共用体の目的、すなわち、いくつかの型のいずれかの一つを合法的に保持する単一の変数を与えることである。」
合法的という言葉は、法律用語では?と思ってしまいます。
英文では、「a single variable that can legitimately hold anyone of several type」です。
どうも、機械的に「合法的」となったようですが、ここでは、「いくつかの型のうちいずれか一つを理にかなった方法で、単一の変数に保持するのが目的である」とでも表現したほうが良さそうな。。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)