質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

2回答

344閲覧

プログラミングの動作について

sugar54321

総合スコア2

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2021/05/14 14:38

#include <stdio.h>

int main() {
int a=1,b=0,i;
char x;
printf("Input number:");
scanf("%d",&x);
for(i=0;i<8;i++){
if(x&a)b++;
a=a<<1;
}

printf("Result = %d\n",b);
return 0;
}

このプログラミングはどのような動作を表しているものになりますか?
for(i=0;i<8;i++){
if(x&a)b++;
a=a<<1;
}
ここの部分の動きがいまいちわからないです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

thkana

2021/05/14 22:06

どうでもいいっちゃどうでもいいけど、「プログラミング」はプログラムを作る行為をいう言葉なので、「プログラミングの動作」という言葉はせいぜい「あなたがプログラムを作るにあたってしたこと」の意味ぐらいにしかなりません(その意味でもそういう言い方はしないでしょうけれど)。 多分、「プログラム」というべきところでしょう。
guest

回答2

0

ベストアンサー

例えば入力値 x が 123 とすると、2 進数では 0b01111011 になります。
また、a の初期値は 1 ですが、2 進数では 0b00000001 です。

ループの中では、まず x & a を計算しますが、これはビット積と呼ばれるもので、x と a の対応するビットが両方 1 のところだけ結果も 1 になります。

a = 1 の場合 a = 2 の場合 a = 3 の場合 a = 4 の場合 0b01111011 0b01111011 0b01111011 0b01111011 & 0b00000001 & 0b00000010 & 0b00000011 & 0b00000100 ------------ ------------ ------------ ------------ 0b00000001 0b00000010 0b00000011 0b00000000

if(x&a)b++; は、x & a が 0 じゃない場合に b を 1 増やします。

a=a<<1; は、a を 1 ビット左にシフトします。
a が 0b00000001 なら 0b00000010 になり、0b00000010 なら 0b00000100 になります。
(これは a を 2 倍するのと同じことです。)

以上を 8 回繰り返す訳ですが、表にするとこんな感じですね。

iaa & x新しい b新しい a
00b000000010b0000000110b00000010
10b000000100b0000001020b00000100
20b000001000b00000000変化なし0b00001000
30b000010000b0000100030b00010000
40b000100000b0001000040b00100000
50b001000000b0010000050b01000000
60b010000000b0100000060b10000000
70b100000000b00000000変化なし0b100000000

投稿2021/05/14 16:27

hoshi-takanori

総合スコア7901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

xのビットの中で1のビットを数えてますね

実際に動かして、どういう結果が出るのかみてみよう

投稿2021/05/14 14:53

編集2021/05/14 15:06
y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問