2進数の0の数を数える - C言語

トピックの紹介

整数を入力し、整数内の 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 つにすぎません。他の興味深い質問については、今後共有する予定です。

おすすめ

転載: blog.csdn.net/m0_72482689/article/details/126589015