C++ 中的邪恶数字

2025 年 5 月 12 日 | 阅读 4 分钟

任何非负整数,如果其二进制形式包含偶数个 1,则称为邪恶数字。例如,9(二进制:1001)是一个邪恶数字,因为它包含两个 1。邪恶数字在 C++ 编程中对于练习二进制操作和位运算符非常流行。为了检查一个数字是否是邪恶数字,必须将其转换为二进制;在计数完 1 之后,应该验证该计数是否为偶数。程序员对这个概念的理解有助于更好地理解二进制算术、位运算符以及用于二进制数字分析的高效算法。邪恶数字是一种将数学概念引入编程的简单而有趣的方式。

示例

  • 9 是一个邪恶数字,因为它的二进制形式 1001 包含两个 1(偶数)。
  • 5 也是一个不足数,因为它在二进制形式 101 中包含两个 1(偶数)。
  • 7 不允许,因为它在二进制形式 111 中包含三个 1,是奇数。

C++ 中,判断一个数字是否是邪恶数字涉及

  • 将数字转换为其二进制形式。
  • 计算二进制表示中 1 的数量。
  • 检查 1 的数量是否为偶数。

以下是一个简单的 C++ 程序的概要

  • 使用位操作确定整数二进制形式中 1 的数量。
  • 在打印之前验证 1 的数量是否为偶数,以检查是否为邪恶数字。

为什么要学习邪恶数字?

  • 二进制操作的例子包括学习位操作和理解整数的二进制表示。
  • 将数学概念应用于逻辑推理称为计算逻辑。
  • 解决问题的一种方法是提出新的数字分类方法。

示例 1

让我们举一个例子来说明 C++ 中的邪恶数字

输出

 
Enter a number: 9
9 is an Evil number.
Enter a number: 23
23 is an Evil number.
Enter a number: 35
35 is not an Evil number.   

说明

  • 在这个例子中,countOnes 函数使用位与运算符 (&) 和右移运算符 (>>) 来计算二进制表示中 1 的数量。
  • isEvilNumber 函数检查 1 的数量是否为偶数。
  • main 函数获取用户输入并确定该数字是否为邪恶数字。

示例 2

让我们再举一个例子来说明 C++ 中的邪恶数字

输出

 
Enter a number: 56
56 is not an Evil number.   

说明

  • __builtin_popcount(n) 函数在 n 的二进制表示中,内置的 GCC/Clang 函数 __builtin_popcount(n) 直接计算 1 的数量。该过程变得更简单,并且无需手动应用逻辑来计算 1。
  • 逻辑:程序使用 __builtin_popcount 的结果来检查 1 的数量是否为偶数。

好处

  • 效率:__builtin_popcount() 函数经过优化,比手动迭代位更快。
  • 简洁性:当代码简洁时,它会更短且更容易理解,因为它消除了对额外辅助函数的需要。

结论

总之,邪恶数字增加了学习二进制数字属性及其计算机应用的乐趣。因为其二进制表示由偶数个 1 组成,它为学习位操作和二进制算术提供了一个简单而引人入胜的练习。创建 C++ 程序来识别邪恶数字展示了对位操作、循环和逻辑推理的掌握。为了获得最佳结果,它还利用了像 __builtin_popcount() 这样的内置例程。由于这些练习可以提高解决问题的能力并拓宽二进制处理知识,因此它们对希望巩固对基本编程概念的理解的学生和程序员很有帮助。