![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
右、左シフトと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ランキング
-
C言語 プログラミング
-
printf で二進表示を行いたい。
-
unsigned int型について
-
scanfに文字が入力されたときに...
-
ヌメロンの対戦相手
-
C言語でマウス入力(クリックや...
-
コマンドラインに出力した文字...
-
円の面積を求めるプログラミン...
-
C言語についてです学籍番号、名...
-
4の倍数を論理演算で表す。。
-
printfのコードは?
-
三角形の判別
-
CPU温度・負荷等を調べるには
-
C言語 関数
-
【C言語教えてください】sin波...
-
LU分解法のピボット選択機能実...
-
cshの文字列操作(0埋め)
-
strcmp
-
パスカルの三角形についてのCプ...
-
プログラム(C言語)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
【C言語教えてください】sin波...
-
printf で二進表示を行いたい。
-
c言語でAからZまでを表示する...
-
コマンドラインに出力した文字...
-
strcmp
-
4の倍数を論理演算で表す。。
-
C言語での、年複利の計算方法...
-
C言語 プログラミング
-
scanfに文字が入力されたときに...
-
hit&bolwのプログラミングがで...
-
%P と %X の違い
-
unsigned int型について
-
printf( " %2d", p * q );
-
cshの文字列操作(0埋め)
-
改行について 1行に何個かづ...
-
8人分のテストの点数を入力し、...
-
入力したお金の金額からお札の...
-
三角形の判別
-
テキストカーソル位置の取得
おすすめ情報