プロが教える店舗&オフィスのセキュリティ対策術

Renesas HEWで、平均値を求める下記の様なプログラムを書いています。

unsigned short data[100] ;
unsigned int total ;
unsigend short avg_short ;
unsigend int avg_int ;

for (i=0; i<100 ; i++) {total += data[100];}
avg_short = (short) (total / 100) ;
avg_int = total / 100 ;

とした場合、avg_intには、平均値が32bit(上位16bit=0)で格納されますが、
avg_shortは、0 が格納されます。
avg_intの下位16bitだけを格納するには、どうしたらよいのでしょうか?

A 回答 (3件)

スペルミスその他いろいろ。



unsigned short data[100] ;
unsigned int total ;
unsigned short avg_short ;
unsigned int avg_int ;
int i;

data[0]~data[99]に何か入れる処理;

total=0;
for (i=0; i<100 ; i++) {total += data[i];}
avg_short = avg_int = total / 100;
printf("%X\n%X\n", avg_short, avg_int);
    • good
    • 1

val_hi = (total/0x10000); /* total の上位 16bit */


val_lo = (total&0xFFFF); /* total の下位 16bit */
    • good
    • 0

5行目のdata[100]はdata[i]の間違いかと思います。


6行目のキャストは(unsigned short)の方がよいかもしれません(結果は変わらないかもしれませんが)。
avg_shortとavg_intには同じ値が格納されるはずのように思いますけど。実際に手計算の結果と比較されましたか?
    • good
    • 0

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