トピックの紹介
整数を入力し、整数内の 0 の数を数えます。
実際、この質問は、前に説明した統計バイナリの 1 という数字に非常に似ています。なので、このブログでは、より早い方法を中心に紹介します。
解決
次の式を参照してください。n=n|(n+1);
この n のバイナリ ビットの右端の 0 を 1 に変更することです。
図:
整数の 2 進ビットがすべて 1 になると、n+1 の値がオーバーフローして 0 になることがわかります。
図:
したがって、私たちの一般的なアイデアは、ループを使用し、ループが作成されるたびに n のバイナリ ビットの右端の 0 を 1 に変更することです。n がすべて 1 の場合、n+1 は 0 になり、その後、ループから抜け出すことになります。ループ。
コードは以下のように表示されます
#include <stdio.h>
int main()
{
int n = 0;
int count = 0;
scanf("%d", &n);
while (n + 1)
{
count++;
n = n | (n + 1);
}
printf("%d\n", count);
return 0;
}
コードを実行した結果:
要約する
重要な知識は、式がn=n|(n+1);
その原理を理解し、その使い方を学ぶ必要があるということです。この質問は使用例の 1 つにすぎません。他の興味深い質問については、今後共有する予定です。