右、左シフトと2のべき乗による乗除算が同じことを証明するプログラムを作っているのですがうまくいきません。
プログラムを載せるのでどこが間違っているのかご教授お願いします。
#include <stdio.h>
int count_bits(unsigned x){
int count = 0;
while(x){
if(x&1U) count++;
x>>=1;
}
return(count);
}
int int_bits(void){
return(count_bits(~0U));
}
void print_bits(unsigned x){
int i;
for(i=int_bits()-1; i>=0; i--)
putchar(((x>>i)&1U) ? '1' : '0');
}
int main(void){
unsigned nx, no, n1, n2;
printf("非負の整数を入力してください:");
scanf("%u", &nx);
printf("何ビットシフトしますか?:");
scanf("%u", &no);
n1=nx * (2^no);
n2=nx / (2^no);
printf("\n整数 = "); print_bits(nx);
printf("\n左にシフトした値 = "); print_bits(nx << no);
printf("\n右にシフトした値 = "); print_bits(nx >> no);
printf("\n2のべき乗で乗算した値 = "); print_bits(n1);
printf("\n2のべき乗で除算した値 = "); print_bits(n2);
putchar('\n');
return(0);
}
No.2ベストアンサー
- 回答日時:
n1=nx * (2^no);
n2=nx / (2^no);
この部分の ^ はCの演算子では排他的論理和(XOR)で累乗ではありませんよ。
累乗ならpow関数を使用するか(double型になるので、これを使うのは不適切かも)
単純に乗算の繰り返しまで分解して計算させる必要がありますね。
ちなみに整数の計算では最適化の処理で乗算や除算が内部でシフト演算に変換されている場合もありますので、
最適化のオプションを無効にしないと意味が無いかもしれません。
No.1
- 回答日時:
科学的手法に対する質問では、「xxxという結果を期待してyyyという方法をとったところ、(予想に反して)zzzという結果が得られた」という情報が不可欠です。
このような情報なしに質問をしても、c言語に用意されていないべき乗演算子を使ったプログラム程度の結果しか得られないと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CTRL+Dでループを抜けるには
-
10個出力で改行したいのですが...
-
printf で二進表示を行いたい。
-
コンパイルエラーについて
-
int型 00 を表示するのに0とな...
-
ifなんですが
-
strcmp
-
三平方の定理を求めるプログラム
-
printfの出力内の文字をdefine...
-
switch分のケースを範囲数?に...
-
%P と %X の違い
-
C言語での、年複利の計算方法...
-
unsigned int型について
-
wsprintfの書式制御文字列につ...
-
c言語でAからZまでを表示する...
-
【C言語教えてください】sin波...
-
テキストカーソル位置の取得
-
defineで定数が置き換えられな...
-
C言語での数字の花形表示
-
勝率をプログラムに
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コンパイルエラーについて
-
printf で二進表示を行いたい。
-
cshの文字列操作(0埋め)
-
テキストカーソル位置の取得
-
【C言語教えてください】sin波...
-
10個出力で改行したいのですが...
-
4の倍数を論理演算で表す。。
-
コマンドラインに出力した文字...
-
strcmp
-
c言語でAからZまでを表示する...
-
printfの出力内の文字をdefine...
-
WM_CLOSEで閉じれないウィンド...
-
三角形の判別
-
台形の面積を求めるプログラム
-
%P と %X の違い
-
wsprintfの書式制御文字列につ...
-
switch分のケースを範囲数?に...
-
(C言語)めちゃくちゃな値にな...
-
error C2143: 構文エラー : ';'...
-
円の面積を求めるプログラミン...
おすすめ情報