こんにちは、神戸の澤です。 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/ ## ## ## ## すべてのメールはバカ者によって盗聴されている可能性があります ##