アプリ版:「スタンプのみでお礼する」機能のリリースについて

変数の定義でとり得る値が1~100の場合の変数の定義は、
 符号有り1バイトで定義する
 符号無し1バイトで定義する
どちらが、一般的なのでしょうか。
メモリをなるべく節約したいのですが、上記どちらも1バイトですし、1~100までなので符号ありでも定義して問題ないと思いますが、それ以外(処理速度等)で2つの定義の違いによるメリット/デメリット等はあるのでしょうか。

A 回答 (7件)

静的な変数でなければint型にしましょう。



自動変数の場合、通常はレジスタに割り付けられますので、char型にするよりint型にする方が有利です。また、スタックに割り付けられる場合でも、境界調整の関係でint型と同じサイズが消費される場合が多く、また、char型やshort型にすると汎整数拡張の処理により多くのメモリ(プログラム)を割く結果になったりします。
処理速度に関しても、char型よりint型の方が、汎整数拡張やサイズの切捨てが不要な分、圧倒的に有利です。
    • good
    • 0
この回答へのお礼

なるほど、自動変数なら通常はレジスタに割り当てられますね。
ありがとうございます。

お礼日時:2005/04/10 01:51

配列のインデックスなどに使うなら符号なし、加減算の対象にとるなら


符号ありのほうがいと思います。
自分の場合は処理ミスで範囲外の値をとったときの振る舞いで決めます。
範囲チェックをコーディングするなら、符号なしの0~99にしたほう
が比較処理が軽くなるかも。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2005/04/10 14:00

こにゃちわ。



プラットフォームに依存すると思いますです。
一般的にはunsignedだと当方はおもっちょります。

符号化するに当たってのメリットは、
「マイナス値をエラー値として扱える。」
くらいかな?

デメリットは、
「CPU/MPUで些細な速度低下があるかもしれない」
プラットフォームによりますね。

signed/unsignedを切り替えての1000回実行で
ベンチを取ってみるのも一興かと。

またバイト単位での速度低下も懸念してみます。
CPUが奇数アドレスへのアクセスを推奨しない場合とかあったりします。
(組み込み系とかで、日立のSH系とか…大半のRISC系でバスエラー
アセンブルソースをみると、WORD単位でアクセスして
上位バイト・下位バイトの取り出しをやってたりする可能性とかありますです。
メモリは節約できますが、実行速度が微小ですが低下したりします。
しかしながら、uchar a[1000]; と ushort a[1000]; とuint a[1000];
とかで考えると…。普通にucharになるかと。
    • good
    • 0
この回答へのお礼

なるほどです。
ありがとうございます。

お礼日時:2005/04/10 13:59

そこまで逝って(^^;)しまったのなら、簡単なプログラムを書いて、逆アセンブルして、その効率を見て決めるべきでしょうね。



思いっきり処理系依存なので、これ以上は回答しません。

私は、他人がソースを読むことを考えた場合、signedもunsignedも付けません。(ソースを読む人に、「何故signedなのか」とか「何故unsignedなのか」を考えさせないために)
で、プログラムのアタマに、この変数は、1から100までの値しか取りませんとコメントを記載します。ソースを読む人にとっては、そちらの方が大事なのだろうと思いますが、如何?
    • good
    • 0
この回答へのお礼

ありがとうございます。
コメントで明確にしたほうが、より親切ですね。

お礼日時:2005/04/10 13:57

符号の有無で、処理速度に差は無かったと思います。


(何億回と繰り返せば、差が出てくる場合もあるかもしれませんが・・・)
『符号有り』で宣言した方が良いと思われます。
尚、私の場合は、特別な理由がないかぎり、符号有りの宣言(”singed”)は、使用していません。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2005/04/10 01:54

処理速度には大差なかったと思います。


特に理由がないのなら、signed(符号あり)にしておきましょう。
理由として、質問者さんが意図している値が1~100であっても
システムが負数を扱う場合があるからです。unsignedで
if( character == EOF )
なんていう比較をうっかりしてしまうと想定外の動作をしますし。
    • good
    • 0
この回答へのお礼

EOFとの比較ですか。
ありがとうございます。

お礼日時:2005/04/10 01:46

符号無しの方が単純でいいんじゃないですか。

    • good
    • 0
この回答へのお礼

単純にそうかもしれません。
ありがとうございます。

お礼日時:2005/03/20 23:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!