计算32位二进制整数中1的个数(包括负数补码)

简介: 计算32位二进制整数中1的个数(包括负数补码)

引言:

在计算机科学和编程中,位操作是一项重要的技能。一个常见的任务是计算一个32位二进制整数中1的个数,包括负数的补码表示。这个问题有多种解决方法,本博客将介绍一种高效的解决方案,同时提供详细的代码案例。

背景知识:

在正整数的二进制表示中,1的个数表示了这个数的二进制形式中有多少个位是置为1的。而在负数的补码表示中,需要考虑到符号位。负数的补码表示是将其绝对值的二进制表示取反再加1。

解决方案:

我们可以使用位操作来计算32位二进制整数中1的个数,无论是正数还是负数的补码表示。下面是一种高效的算法:

def count_ones(n):
    count = 0
    while n:
        count += 1
        n = n & (n - 1)
    return count

这个算法的关键在于利用了位操作的性质。在每次循环中,我们将整数n与(n-1)做按位与操作,这将把n的二进制表示中最右边的1变为0。重复这个过程,直到n变为0,每次循环计数加1。

代码案例:

下面是一个完整的Python代码示例,演示了如何使用上述算法计算一个32位二进制整数中1的个数,包括负数的补码表示:

def count_ones(n):
    count = 0
    while n:
        count += 1
        n = n & (n - 1)
    return count
# 测试正数
num1 = 23
print(f"二进制表示:{bin(num1)}")
print(f"1的个数:{count_ones(num1)}")
# 测试负数
num2 = -23
print(f"二进制表示:{bin(num2 & 0xFFFFFFFF)}")  # 将负数转换为补码表示
print(f"1的个数:{count_ones(num2 & 0xFFFFFFFF)}")  # 计算1的个数

在这个示例中,我们首先测试了一个正数23和一个负数-23。注意,对于负数,我们使用了位操作将其转换为补码表示,并且计算1的个数仍然有效。

总结:

计算一个32位二进制整数中1的个数是一个常见的编程问题,对于正数和负数的补码表示都有有效的解决方案。本博客介绍了一种高效的位操作算法,并提供了详细的代码案例,希望对你在面试或实际编程中有所帮助。


目录
相关文章
|
算法 Python
计算32位二进制整数中1的个数(包括负数补码)
计算32位二进制整数中1的个数(包括负数补码)
82 0
|
2月前
两个整数相加
【10月更文挑战第12天】两个整数相加
22 5
|
3月前
|
存储 编译器 C语言
取一个整数a从右端开始的4~7位。
取一个整数a从右端开始的4~7位。
34 1
|
6月前
取一个整数 a 从右端开始的 4~7 位
【6月更文挑战第23天】取一个整数 a 从右端开始的 4~7 位。
47 9
|
7月前
求两个整数之和
两幅图片展示,无文字描述。第一张图片链接:`https://ucc.alicdn.com/pic/developer-ecology/jsj5v54nhc5lk_9a19903e665642b388dedfa69ba6dd98.jpg`,第二张图片链接:`https://ucc.alicdn.com/pic/developer-ecology/jsj5v54nhc5lk_9698cabf5d2f4ce38f6ea21a4ee8430e.jpg`。
38 0
一个数字的二进制数字里的一的个数(负数用补码)
这是一种解决问题的函数,缺点,会有死循环,((int)pow(-2, i))这个值的结果是整形永远达不到那个数字2147483648,我们必须自己规定那个数字
54 0
【C语言】输入一个整数,输出该数二进制表示中1的个数,其中负数用补码表示
输入一个整数,输出该数二进制表示中1的个数,其中负数用补码表示
|
C语言
5.1.4_带符号整数的表示和运算_原反补
计算机组成原理之带符号整数的表示和运算_原反补
261 0
5.1.4_带符号整数的表示和运算_原反补
35.数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方
55 0
35.数值的整数次方
|
前端开发 JavaScript 程序员
数值的整数次方
数值的整数次方
数值的整数次方