みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

【C言語】シフト演算による乗算

正の整数を二つ読み込み、乗算をシフト演算によって行いたいです。
プログラムを作ったのですが、動きません・・・。強制終了されます。

(例)53×25=53×(2^4+2^3+2^0)
 =(53を左に4ビットシフト)+(53を左に3ビットシフト)+(53を左に0ビットシフト)

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4803.txt

どこが悪いのでしょうか・・・。

投稿日時 - 2007-08-02 08:01:28

QNo.3220255

困ってます

質問者が選んだベストアンサー

s を戻り値で返すなら引数に s は必要ないです
/*--- noの値をnoを越えない2のべき乗にする ---*/
int analyze(unsigned no)
{
unsigned i;
int s = 0;

for (i=2; i<no; i<<=1)/* iは2のべき乗 */
s++;
return(s);/* noを越えない値は2^sである */
}
でdivide関数のsを削除して
count[k] = analyze(no);
にすれば「値が代入される前に使われている(関数 divide)」とか言われなくてすみます。

投稿日時 - 2007-08-02 09:55:54

お礼

ホントだ・・・・。

たしかにdivide関数でsはいらないですね・・・。
すいません、アホでした。ありがとうございます。

投稿日時 - 2007-08-02 10:04:50

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

ん~ 開発に使った環境はなんでしょう?
どこで落ちるのかデバッガでステップ実行してみましょう

当方の環境 VC6.0 / Borland C++5.02 どちらも強制終了にはなりませんでしたよ... 答えは 0でしたが

また関数divideで引数kの値が変化することを mainが期待しているようですが int kでは期待に沿いません
ポインタで渡してやらないと 呼び出し元には反映できませんよ
または k自体を戻り値としてやるかです

投稿日時 - 2007-08-02 08:31:06

補足

使った環境はbccです。

おっしゃるとおり、ポインタでアドレスを引き渡すことをしてなかったので・・・そこは直したんですが、次はこんな警告が出ました。

警告 W8013 test.c 26: 's' は、おそらく値が代入される前に使われている(関数 divide)

どういう意味でしょうか・・・

投稿日時 - 2007-08-02 09:03:13

あなたにオススメの質問