C++怎么计算二进制数中1的个数


今天小编给大家分享一下C++怎么计算二进制数中1的个数的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。见到计算二进制数中的1的个数的比较精巧的做法,做个笔记(其实是之前被问到了,所以就查了下…刚看见时不太明白思路,然后自己拿笔随便划拉了下,算是搞明白了思路,简单总结一下。这个方法的主要思想就是找到当前数字中最靠右的1。n – 1(n不为0时)会使得n的最右侧第一个1以及该位的右侧的所有位取反,此时进行与操作,就会将该位置为0。其实看上面那句话就行了,思路很简单,完全理解不了思路才需要看下面的:大致上可以分成两种情况,当然事实上可以看成是同一种情况第一种:n的最右边是1。如果n最右边是1的话,n-1就只有最右边那一位变为0,此时n & (n – 1)就相当于是把n中右边第一位的1拿掉,比如n为0111时,n – 1就是0110,两者相与,结果就是n – 1,此时n – 1中1的个数比n中少1,且最右侧的位为0,已经转变为第二种情况。第二种:n的最右边是0。此时计算n – 1时,需要向上借位,一直借到n的最右侧的第一个1。例如n为1000时,n – 1就是0111,此时可以发现,n的第一个1的右侧的所有位都变成了1,并且原来是1的位变成了0。注意初始时n的第一个1的右侧的所有位都是0,计算n – 1后这些位都变成了1,此时再做与操作,这些位都会变成0。所以效果就是”n的右侧第一个为1的位被置为0″。最后当n中不存在为1的位时,n的值等于0,while循环退出。这种做法相对于直接从右往左靠移位和与的做法来说更好一些,不需要遍历所免费云主机域名有的位,也少了不少的判断,运行时间与n中1的个数相关。输入正整数n,判断从1到n之中,数字1一共要出现几次。例如1123这个数,则出现了两次1。例如15,那么从1到15之中,一共出现了8个1。一个正整数n一个整数,表示1出现的资料样例输入15样例输出8数据规模和约定n不超过30000以上就是“C++怎么计算二进制数中1的个数”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注百云主机行业资讯频道。

相关推荐: .Net Core怎么自定义日志组件

这篇文章主要介绍“.NetCore怎么自定义日志组件”,在日常操作中,相信很多人在.NetCore怎么自定义日志组件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”.NetCore怎么自定义日志组件”的疑惑有所帮助!接下来,请跟着…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 03/22 14:26
下一篇 03/22 14:28

相关推荐