
右、左シフトと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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
10個出力で改行したいのですが...
-
配列データをExcelファイルとし...
-
c言語でAからZまでを表示する...
-
switch分のケースを範囲数?に...
-
defineで定数が置き換えられな...
-
printfのコードは?
-
_putts、_putwsが実行されない
-
コマンドプロンプトがすぐ消える
-
c言語
-
コマンドラインに出力した文字...
-
改行について 1行に何個かづ...
-
スレッドとメッセージキューに...
-
printf( " %2d", p * q );
-
テキストカーソル位置の取得
-
プログラミング教えてください
-
じゃんけんゲームの応用
-
C言語についてなのですが、
-
C言語のじゃんけんゲームのプロ...
-
Cプログラムについて
-
入力したお金の金額からお札の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
c言語で2000年以降カレンダーを...
-
c言語でAからZまでを表示する...
-
【C】fizzbuzzのトリッキーなコ...
-
strcmp
-
printf で二進表示を行いたい。
-
【C言語教えてください】sin波...
-
コマンドラインに出力した文字...
-
8人分のテストの点数を入力し、...
-
コンパイルエラーについて
-
CTRL+Dでループを抜けるには
-
(C言語)めちゃくちゃな値にな...
-
cshの文字列操作(0埋め)
-
テキストカーソル位置の取得
-
コマンドプロンプトがすぐ消える
-
printfの出力内の文字をdefine...
-
scanfに文字が入力されたときに...
-
台形の面積を求めるプログラム
-
改行について 1行に何個かづ...
-
WM_CLOSEで閉じれないウィンド...
おすすめ情報