- 締切済み
C言語の型変換(int~short)について
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だけを格納するには、どうしたらよいのでしょうか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- notnot
- ベストアンサー率47% (4900/10358)
スペルミスその他いろいろ。 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);
- jppy
- ベストアンサー率14% (14/99)
val_hi = (total/0x10000); /* total の上位 16bit */ val_lo = (total&0xFFFF); /* total の下位 16bit */
- hashioogi
- ベストアンサー率25% (102/404)
5行目のdata[100]はdata[i]の間違いかと思います。 6行目のキャストは(unsigned short)の方がよいかもしれません(結果は変わらないかもしれませんが)。 avg_shortとavg_intには同じ値が格納されるはずのように思いますけど。実際に手計算の結果と比較されましたか?