
右、左シフトと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を探す
今、見られている記事はコレ!
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
-
大麻の使用罪がなかった理由や法改正での変更点、他国との違いを弁護士が解説
ドイツで2024年4月に大麻が合法化され、その2ヶ月後にサッカーEURO2024が行われた。その際、ドイツ警察は大会運営における治安維持の一つの方針として「アルコールを飲んでいるグループと、大麻を吸っているグループ...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリー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で閉じれないウィンド...
おすすめ情報