C言語関係掲示板

過去ログ

No.427.int型・short型とunsignedの使い分け

[戻る] [ホームページ]
No.2971

型の使い分けについて質問
投稿者---イタチ(2002/10/18 02:04:08)


初めまして。
おそらくかなり初歩的なことなのだと思うのですが、つい最近になって
どうするべきか悩み始めました。


int型・short型とunsignedの使い分けというのはどの様な
場合にするのでしょうか?

int型のサイズはシステムによって違うと言うことですが
他システムへの移植を考えなければ、あまり意識する必要は
ないのでしょうか?

あとunsignedなのですが、正数しか扱わないと言う保証と
扱う数の範囲も、型の範囲に収まる保証がある場合、いちいち
unsignedを付けない方が良いのでしょうか?

No.2978

Re:型の使い分けについて質問
投稿者---kikk(2002/10/18 03:45:31)


ども。


>int型・short型とunsignedの使い分けというのはどの様な
>場合にするのでしょうか?

とりあえずこちらが参考になるかと。
「C FAQ」
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
-> 01.宣言と初期化 の1.1


>int型のサイズはシステムによって違うと言うことですが
>他システムへの移植を考えなければ、あまり意識する必要は
>ないのでしょうか?

規格上、最低16ビットなので、それより小さな値しか扱わなければ(それと、
ポインタを使って技巧的なことをしなければ)意識する必要はないと思います。
なお、sizeofや、limits.hの諸定数を利用すれば(場合によってはtypedefも)、
int型のサイズに依存しないコードを書くことはそう難しくはありません。


>あとunsignedなのですが、正数しか扱わないと言う保証と
>扱う数の範囲も、型の範囲に収まる保証がある場合、いちいち
>unsignedを付けない方が良いのでしょうか?

多くのコードでは、unsigned intを使うのは、

o とりうる値が非負で、かつ、signedでは表現できないがunsignedならOK
o オーバーフロー時の動作を保証したい
o ビットパターンを格納する
o (右)シフト時の動作を制御したい

等の(場合によっては複合した)理由によっています。デフォルトがsigned
なので、あえて、unsignedを指定したコードを見た場合、何らかの理由が
あるのだろう、と(少なくともわたしは)判断します。もし、正数しか現われ
ないという理由のみでunsignedがついていた場合は冗長に感じます(つけても
動作上は問題ないでしょうけど)。


では。


おまけ(?)
昔やったミス。

unsigned int i;
for (i=10;i>=0;i--) {
/* 終わりません(と、そのとき使っていた賢いコンパイラ様に言われた) */
}

No.3007

ありがとうございました。
投稿者---イタチ(2002/10/18 21:32:29)


kikkさん返信ありがとうございます。
ご紹介いただいたアドレスですが、「宣言と初期化」
はそのものズバリでした。
その他にも、たまにこんがらがる事も分かりやすく書い
てあるのでとても参考になります。
このようなページを紹介していただきホントに
ありがとうございます。


>何らかの理由があるのだろう、と(少なくともわたしは)
>判断します。もし、正数しか現われないという理由のみで
>unsignedがついていた場合は冗長に感じます

もしかして、そう思うのは私だけ?と思い質問させて頂いたのですが
kikkさんも同じで安心しました。
確かに、装飾は意味を持たせるためにつけた方が
解読性がましますね。


>おまけ

実際に動かしてiの値を見て、なぜダメなのかに気付きました(汗ッ
すぐに気付かなかったと言うことは、遠からず同じ事をやら
かしていたと思います。
私にとって実にためになる失敗例でした。感謝です。

それにしても、親切にループのミスを教えてくれるなんて
凄いですね。