H29春の午後問9(C言語)の設問2について
kenさん
(No.1)
H29春、C言語の設問2の穴埋め(d)で答えがイになる経緯がわかりません。
work=work&(work-1)
はどんな演算なのでしょうか?
while文の条件からworkの'1'の数が減る演算だろうとは思うのですが…
よろしくお願いしますm(_ _)m
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にあります(生き写し)ので、見てください。
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日経過したスレッドへの投稿はできません。
広告