计算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的个数(包括负数补码)
77 0
|
30天前
两个整数相加
【10月更文挑战第12天】两个整数相加
19 5
【剑指offer】-数值的整数次方-12/67
【剑指offer】-数值的整数次方-12/67
|
11月前
统计两个整数所对应的二进制数中的不同位数的个数
统计两个整数所对应的二进制数中的不同位数的个数
42 0
打印整数二进制的奇数位和偶数位
打印整数二进制的奇数位和偶数位
55 0
一个数字的二进制数字里的一的个数(负数用补码)
这是一种解决问题的函数,缺点,会有死循环,((int)pow(-2, i))这个值的结果是整形永远达不到那个数字2147483648,我们必须自己规定那个数字
49 0
【C语言】输入一个整数,输出该数二进制表示中1的个数,其中负数用补码表示
输入一个整数,输出该数二进制表示中1的个数,其中负数用补码表示
35.数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方
51 0
35.数值的整数次方
|
前端开发 JavaScript 程序员
数值的整数次方
数值的整数次方
数值的整数次方
获取一个整数二进制序列中所有的偶数位和奇数位
获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列
152 0