[H8-ML(2424)] Re: C言語での掛け算について
From: Kazutaka "Zak" Sawa <CXJ03106@xxxxxxxxx>
Date: 2002年11月24日(日)15時57分39秒
こんにちは、神戸の澤です。

Kimitsugu Nakaoさんが02.11.24 12:27に書きました:
>  temp1 = input_data * 0x745d;           /* temp1にはQ.30フォーマットで保

ワタシの記憶が正しければ、C言語の規約に則ってココの答えは16bitでの値に
なるハズです。

定数は指定がなければ一番小さなサイズ(この場合は恐らくunsigned short)
になるハズですから、式の右辺は一旦unsigned shortの範囲で計算され、オー
バーフローしているんじゃないでしょうか。その結果がいくらになるかはわか
りませんが、それをunsigned longに入力しても、すでに値はリミッターがか
かった状態になっていると思います。

「0x745d」ではなく「0x745dL」と指定するか、もしくは

temp1 = input_data;
temp1 = temp1 * 0x745d;

という形にしないと、正しくunsigned longでの値にならないと思います。

お試しあれ。


##                             from Kazutaka 'Zak' Sawa (ZakLab)  ##
##                           e-Mail: mailto:zak.k.sawa@xxxxxxxxx  ##
##                           http://homepage1.nifty.com/~zaklab/  ##
##                                                                ##
## すべてのメールはバカ者によって盗聴されている可能性があります ##
スレッド概略
[2423(R)](起点)
 └[表示中]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]