e23.c
char 型は遅いよ





1.遅い!!
修正前
char i ;
for(i = 0 ; i < 0x7f ; i++) {
配列[i] = 0 ;
}
修正後
int i ;
for(i = 0 ; i < 0x7f ; i++) {
配列[i] = 0 ;
}
日本人は縮み指向(盆栽が好き)があり、
CHAR/SHORTを好みますが、
CHAR/SHORTの計算は、
一度INTへ拡張処理がはいるため、遅いです。
境界調整がはいるので、スタックの節約にもなりません。
左辺をINT型にできないか検討して下さい!!
ただし、
コンピュータ外部への入出を伴う、構造体のメンバーでは、
CHAR/SHORTを使用してもかまいません。
先の例では処理速度が2倍も違います!!
詳細は、
『プログラミング言語C 第2版 ANSI規格準拠
カーニハン リッチー著/石田晴久訳』
「2.7 型変換」Page52
か
C-FAQ 1.1J
C-FAQ 1.1E
を参照して下さい。
2.頭が欠けます
short S ;
long L = 0x10008000 ;
printf("S=L= %x¥n",) ;
解説
┌──┐┌──┐
L: │1000││8000│
└──┘└──┘
↓
┌──┐
S: │xxxx│
└──┘
─────────────
┌──┐
S: │8000│ サインビットが立っている。
└──┘
以下の危険がある。
(1) 頭(0x1000)が欠ける(事もある)。
(2) 正値が負値になる(事もある)。