C言語を用いて、2の累乗(2,4,8,16・・・)を
計算して表示するプログラムを
#include<stdio.h>
void main(void)
{
int i,s;
s=1;
for(i=1; i<=15; i++)
{
s=s*2;
printf("i=%2d s=%7d\n",s);
}
}
と打ち込んで実行したのですが、結果が
i= 1 s= 2
i= 2 s= 4
i= 3 s= 8
i= 4 s= 16
i= 5 s= 32
i= 6 s= 64
i= 7 s= 128
i= 8 s= 256
i= 9 s= 512
i=10 s= 1024
i=11 s= 2048
i=12 s= 4096
i=13 s= 8192
i=14 s= 16384
i=15 s= -32768
のように、2の15乗だけが負になってしまいました。
最初のintをdoubleやfloatに直して実行すればよいのかとも考えたのですが、
実行すると答えがすべて0になってしまい上手くいきませんでした。
どの部分がおかしいのでしょうか・・・;
No.3ベストアンサー
- 回答日時:
No2です。
追記ですが、printfの変換指定子は型にあわせたものを使わなければ正しく表示されません。
long であれば %ld にしてください。
参考URL:http://ja.wikipedia.org/wiki/Printf
重ねてありがとうございます。
intやlongばかりに目が行ってて、変換指定子まで目が行ってませんでした・・・;
実行してみたところ、
i= 1 s= 2
i= 2 s= 4
i= 3 s= 8
i= 4 s= 16
i= 5 s= 32
i= 6 s= 64
i= 7 s= 128
i= 8 s= 256
i= 9 s= 512
i=10 s= 1024
i=11 s= 2048
i=12 s= 4096
i=13 s= 8192
i=14 s= 16384
i=15 s= 32768
という結果を出すことができました。
ありがとうございます。
No.2
- 回答日時:
16Bitでの(signed)int型があらわせるのは -32768~32767 までです。
(signed)int型で15の二乗の32768はオーバーフローをして-32768になってしまいます。
unsigned int もしくは long を使用してください。
オーバーフローは考えつきませんでした・・・。
さっそく実行してみます。
(実行中・・・)
答えて頂いたところ申し訳ないのですが、やはり改善しませんでした;
unsigned intでもオーバーフローが起こってしまい、
longはNo.1の方と同様に答えが0になってしまいました・・・
No.1
- 回答日時:
WinXP Pro SP2 + bcc32で再現しない。
が、long intにすれば治るのではないか?(C言語系俺あまり経験無いし、再現確認してないが)
http://www.st.rim.or.jp/~phinloda/cqa/cqa5.html#Q1
あと、その出力結果得るなら
printf("i=%2d s=%7d\n",i,s);
ではないか?
この回答への補足
出力結果の違いはご指摘の通りです;
乗数のiが表示されてた方がいいかな、と思って付け足したのですが、
書き忘れたようです、すいません。
回答ありがとうございます。
long intも試してみたのですが、
i= 1 s= 0
i= 2 s= 0
i= 3 s= 0
i= 4 s= 0
i= 5 s= 0
i= 6 s= 0
i= 7 s= 0
i= 8 s= 0
i= 9 s= 0
i=10 s= 0
i=11 s= 0
i=12 s= 0
i=13 s= 0
i=14 s= 0
i=15 s= 0
となってしまいました;
これでは治らなかったようです・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# プログラミングを教えて欲しいです。 配列aは、int a[9]={7,6,12,8,3,5,10,9 4 2022/12/19 23:27
- C言語・C++・C# プログラミングのペーパーテスト 実行結果を表示せよ #include <stdio.h> int h 1 2022/07/09 15:27
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- C言語・C++・C# プログラミング実行後に表示される値を答えよ #include <stdio.h> void main 4 2022/05/28 10:20
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
10個出力で改行したいのですが...
-
printf で二進表示を行いたい。
-
コマンドプロンプトがすぐ消える
-
C言語で四則演算を使って結果が...
-
CTRL+Dでループを抜けるには
-
switch分のケースを範囲数?に...
-
文字と数字の判定について
-
unsigned int型について
-
C言語で、「自然数nを入力し、n...
-
getcharの連続について
-
入力したお金の金額からお札の...
-
8人分のテストの点数を入力し、...
-
int型 00 を表示するのに0とな...
-
C言語で 選択肢: |?| |?| |?| 1...
-
数当てゲームを作っているのですが
-
【プログラム】2の倍数で表示非...
-
アドレスの比較について
-
C言語プログラミングで「コマン...
-
C言語の数値入力
-
改行について 1行に何個かづ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
既約分数の表示プログラム
-
printf で二進表示を行いたい。
-
8人分のテストの点数を入力し、...
-
printf( " %2d", p * q );
-
strcmp
-
CTRL+Dでループを抜けるには
-
4の倍数を論理演算で表す。。
-
%P と %X の違い
-
【C言語教えてください】sin波...
-
c言語でAからZまでを表示する...
-
cshの文字列操作(0埋め)
-
万年カレンダーのC言語プログラ...
-
コマンドラインに出力した文字...
-
scanfに文字が入力されたときに...
-
ホームページをC言語で作りたい...
-
改行について 1行に何個かづ...
-
コンパイルエラーについて
-
台形の面積を求めるプログラム
-
なぜgccはstdio.hをインクルー...
おすすめ情報