質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

4回答

638閲覧

2の累乗のことです。

mthr

総合スコア8

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2020/05/12 15:24

編集2020/05/12 15:38

C言語

1#include <stdio.h> 2#include <math.h> 3 4int main(void) { 5 float a,k,i,m; 6 int b; 7 m=1; 8 k=log(10*10*10*10*10*10)/log(2); 9 b=(int)k; 10 printf("%d\n",b); 11 for(i=0;i<=k;i=i++); 12 m=m*2; 13 printf("%d",m); 14 15}

元々「log2(1000000)」で得られた値の分、2を累乗して←の式の真数の値をだすプログラムを作ろうとしていたのですが底を2にする方法が分からなかったので、底の変換公式を用いて↑のプログラムのような形にしました。

for(i=0;i<=k;i++);
m=m*2;

で2を累乗して10000000にしたいです。ですが結果は「0」と表示されてしまいます。ここが質問させて頂いた所です。ご授お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gentaro

2020/05/12 15:36

どう見てもC#ではないですえねぇ。
cateye

2020/05/12 15:54

>底を2にする方法が分からなかった・・・mthrさんの環境で-srd=c99以上は使えませんか? The log2 functions (C99)→http://www.c-tipsref.com/reference/math/log2.html
mthr

2020/05/14 14:11

遅れてすみません。c99がどうか分かりません。そして上記のlog2を試しましたが、エラーメッセージで「log2が定義されていない」と表示されて実行出来ません。
Yasumichi

2020/05/14 14:23

ちなみに使用しているコンパイラーもしくは IDE は何ですか?
mthr

2020/05/15 00:25

苦Cのやつです
cateye

2020/05/15 10:33

参考までにC99→https://ja.wikipedia.org/wiki/C99 通常コンパイルオプショに "-std=c99"と、指定します。
mthr

2020/05/16 13:58

出来ました。 他の皆さんもありがとうございました。
guest

回答4

0

C

1for (i = 0; i <= k; i = i++);

何も処理せずループしています。

diff

1-printf("%d",m); 2+printf("%f",m);

書式指定が誤っています。

投稿2020/05/12 15:43

編集2020/05/12 15:56
SHOMI

総合スコア4079

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

log だと自然対数になりますが問題ないですか?常用対数であれば、log10 を使います。

C言語関数辞典 - log10, log10f, log10l

また、C99 であれば、底を2とすることもできます。

C言語関数辞典 - C言語Tips集 2 を底とする対数を計算する

投稿2020/05/12 15:55

Yasumichi

総合スコア1773

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mthr

2020/05/14 14:17

遅れてすみません。C99がどうか分かりません。log2で実行すると、「log2」が定義されていないと表示されてしまいます。
guest

0

申し訳ないですが、、、質問の意味が良く分からない、、。

既に指摘されてますが、以下の箇所の修正を

for(i=0;i<=k;i=i++);
m=m*2;

==> for(i=0;i<=k;i++) m=m*2;
for()で mが乗算されない。
i=i++: は、iの加算が保証されない。(今はOK?)

printf("%d",m); --> printf("%f",m);

あと、2の累乗で、浮動小数点は良いか? intにして単純シフト(これも指摘済みか)で良いのでは。(同様に、オーバーフロー注意)

投稿2020/05/13 12:05

編集2020/05/13 12:23
pepperleaf

総合スコア6383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SHOMI

2020/05/13 12:17

>i=i++ 見落としていました。 未定義動作ですね。
guest

0

2の累乗するなら
m=1<<k;
でどうぞ

#変数のビット幅に注意

投稿2020/05/12 23:24

y_waiwai

総合スコア87793

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問