• 締切済み

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だけを格納するには、どうしたらよいのでしょうか?

みんなの回答

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.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);

  • jppy
  • ベストアンサー率14% (14/99)
回答No.2

val_hi = (total/0x10000); /* total の上位 16bit */ val_lo = (total&0xFFFF); /* total の下位 16bit */

  • hashioogi
  • ベストアンサー率25% (102/404)
回答No.1

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

関連するQ&A