移植性のあるCプログラミング

C言語を使って移植性の高いプログラミングを行うのは簡単ではありません。このブログでは、筆者自身の備忘録を兼ねて、移植性のあるプログラミングのノウハウを記録していきたいと思います。
<< August 2017 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 >>
 
PROFILE
RECOMMEND
Cプログラミング診断室―さらに美しく健康的なプログラムのために
Cプログラミング診断室―さらに美しく健康的なプログラムのために (JUGEMレビュー »)
藤原 博文
私がある程度C言語でプログラミングができるようになった頃、この本の旧版を読みました。
非常に辛口の内容であり、読者によっては嫌悪感を抱く方もおられるかもしれませんが、「Cプログラミング診断室」は、C言語に関する数少ない有益な書籍のひとつです。もっとも、元の内容がかなり古いため、今となってはやや時代遅れとなった部分もあります。しかし、それを差し引いても、十分に読む価値のある一冊です。
RECOMMEND
新ANSI C言語辞典
新ANSI C言語辞典 (JUGEMレビュー »)
平林 雅英
まだC言語を覚えたてだった頃、この本の前の版である「ANSI C言語辞典」がボロボロになるまで活用しました。私が購入したC言語関連の書籍の中では、最もコストパフォーマンスが高かったと思います。
あまりにもボロボロになったので、改訂版にあたる、この「新ANSI C言語辞典」を購入しました。旧版を最初に手にしてから10年以上経ちますが、今なお手放すことができない必携の一冊です。
ARCHIVES
RECENT COMMENT
RECENT TRACKBACK
MOBILE
qrcode

無料ブログ作成サービス JUGEM
 
スポンサーサイト

一定期間更新がないため広告を表示しています


- | | - | -
sizeof(型名) * CHAR_BIT != 有効ビット幅
char型が8ビットでlong型が32ビットの場合、sizeof(long)は4バイトになりますから、sizeof(long)*CHAR_BIT == 32で、バイト数に1バイトあたりのビット数(ここでは8ビット)を掛ければ有効ビット数になります。ところが、常にこうしたことが成り立つとは限りません。

特に、DSPなどでは、long型が48ビットのような中途半端な有効ビット幅を持っていたりします。これを32ビット境界に整列させようとすると、long型は8バイトでなければなりません。すなわち、sizeof(long)*CHAR_BIT == 64となり、有効ビット数である48ビットとは異なる結果になったりします。

そういった特殊なDSPなどに遭遇する機会は少ないかもしれませんが、浮動小数点型の場合は、同様の状況に遭遇することも比較的多いかと思います。例えば、Intelのi686をターゲットとするGCCでは、long double型の有効ビット幅が80ビットですが、境界調整の関係上、sizeof(long double)は12だったりします*1

もっとも、浮動小数点型の場合は、シフト演算や論理演算が使えないこともあって、有効ビット幅が直接影響することは少ないでしょうが、整数型についても、移植性を考慮に入れるのであれば、sizeof(型名)*CHAR_BIT を有効ビット幅として扱うべきではありません。ましてや、sizeof(型名)*8 などとするのは最悪です。


*1 バージョンによります。

スポンサーサイト

- | 00:44 | - | -
コメント
コメントする









 
トラックバック
この記事のトラックバックURL
http://portable-c.jugem.jp/trackback/18