HOME»基本情報技術者試験掲示板»H29春の午後問9(C言語)の設問2について
投稿する

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

 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日経過したスレッドへの投稿はできません。
© 2010- 基本情報技術者試験ドットコム All Rights Reserved.

Pagetop