首页 > 其他分享 >计算32位二进制整数中1的个数(包括负数补码)

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

时间:2023-10-10 11:01:11浏览次数:34  
标签:count 补码 二进制 32 个数 负数

引言:

在计算机科学和编程中,位操作是一项重要的技能。一个常见的任务是计算一个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的个数是一个常见的编程问题,对于正数和负数的补码表示都有有效的解决方案。本博客介绍了一种高效的位操作算法,并提供了详细的代码案例,希望对你在面试或实际编程中有所帮助。

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

标签:count,补码,二进制,32,个数,负数
From: https://blog.51cto.com/u_15288375/7789381

相关文章

  • 【ABC322C】题解
    AtCoderBeginnerContest322ProblemC-Festival题解Meaning-题意简述给定\(N\)和\(M\),还有\(M\)个正整数\(a_1\sima_n\),对于每个\(i\len\),求出\(a\)中第一个大于等于\(i\)的整数和\(i\)的差。Solution-题解思路题目保证\(a\)数组单增,所以就可......
  • 【ABC322D】题解
    AtCoderBeginnerContest322ProblemD-Polyomino题解Meaning-题意简述给定三个字符矩阵,求它们能不能拼在一起变成一个\(4\times4\)的全部是#的矩阵。Solution-题解思路大模拟。说简单也不简单,很复杂;但是说难呢,又不难。思路:搜索每一个矩阵的状态。0x001旋......
  • 32个保留字举例说明
    当涉及到C语言的保留字时,理解其含义和用法是很重要的。下面对32个C语言保留字进行简单的解释并举例说明。1.**auto:**  -**说明:**定义自动变量,通常在函数内部使用。  -**示例:**`autointx;`2.**break:**  -**说明:**用于跳出循环或switch语句。  -**示例:**......
  • stm32与dsp有什么区别
    dsp比stm32高级,处理速度也快,两个不是一个级别的。dsp要难学的多,要自己分内存,写cmd文件等等。stm32容易入门。功能上STM32F103能实现的dsp2812也能实现吗?简单的可以,毕竟不是同一级别的东西,dsp跑个100多m,stm32就不行了,高速的东西做不了。2812运算性能比STM32F103强。dsp2812即T......
  • 232. 用栈实现队列
    请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:voidpush(intx) 将元素x推到队列的末尾intpop() 从队列的开头移除并返回元素intpeek() 返回队列开头的元素booleanempty() 如果队列为空,返回 true ;否则......
  • 《安富莱嵌入式周报》第324期:单对以太网技术实战,IROS2023迪士尼逼真机器人展示,数百万
    周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 更新一期视频教程:第8期ThreadX视频教程:应用实战,将裸机工程移植到RTOS的任务划分,驱动和应用层交互,中断DMA,C库和中间件处理等注意事项https://www.armbbs.cn/forum.php?mod=vie......
  • 2023-2024-1 20231323 《计算机基础与程序设计》第二周学习总结
    2023-2024-120231323《计算机基础与程序设计》第2周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第二周作业这个作业的目标数字化、信息安全与自学教材《计算机科学概论》《C语言程......
  • 二进制部署k8s集群
    1.配置主机hostname2.配置hosts映射并拷贝至其他节点3.配置时间同步yum-yinstallchrony.x86_64vim/etc/chrony.confserverntp.aliyun.comiburstserverntp1.aliyun.comiburstserverntp2.aliyun.comiburstserverntp3.aliyun.comiburstsystemctlstar......
  • 456. 132模式
    链接https://leetcode.cn/problems/132-pattern/description/思路这题其实不难,就是边界条件难想。我们可以先保证单调栈里是逆序,然后判断单调栈中较小的值是否大于当前元素(满足132的1和2的关系)。代码classSolution:deffind132pattern(self,nums)->bool:......
  • 2023-2024-1 20231325 《计算机基础与程序设计》第二周学习总结
    目录作业信息教材学习内容总结1.《计算机科学概论》第一章1)计算系统;2)计算系统的分层;3)抽象;《c语言程序设计》第一章学习编程的原因,了解编程及编程的学习。gcc测试作业信息这个作业属于哪个课程2023-2024-1《计算机基础与程序设计》这个作业的......