H29春の午後問9(C言語)の設問2について

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
kenさん  
(No.1)
H29春、C言語の設問2の穴埋め(d)で答えがイになる経緯がわかりません。
work=work&(work-1)
はどんな演算なのでしょうか?
while文の条件からworkの'1'の数が減る演算だろうとは思うのですが…
よろしくお願いしますm(_ _)m
2017.08.29 15:18
通りすがりの者さん 
(No.2)
&演算子は、ビットごとのANDをとる演算子です。よって、
work=work&(work-1)
は、workと(work-1)のビットごとのANDをとり、それをworkに代入します。

workが  0101 0000 0…0  の時、  
work-1は  0100 1111 1…1  となり、
work&(work-1)は  0100 0000 0…0  となり、dの正解はイです。

結果的に、
work=work&(work-1)
は、workに含まれるビットのうち最も右の1を0に変えることになります。これを、workが0でない間繰り返せば、workに含まれる1のビットの個数がわかります。

なお、このプログラム2と同様の内容がH24年春期午後問8のプログラム3にあります(生き写し)ので、見てください。
2017.09.01 15:14
kenさん  
(No.3)
納得できました、ありがとうございます!
2017.09.04 18:08

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop