编程问题之:x=x&(x-1)

简介:

如下代码输出多少:

#include <iostream>
using namespace std;

int BTcount(int x) {

    int count = 0;
    while(x) {
        x=x&(x-1);
        count++;
    }

    return count;
}

int main() 
{
    cout<<BTcount(9999)<<endl;
    return 0; 
}

输出:
8

这题需要一点数学知识,输出结果是:

转换为二进制之后1的数量

原理:假设一个数有n个1,最低位开始数第一个1(后面都是0),那如果 x-1,必然使得这一位为0,后面都变成1了。
比如:12(1100),那11就是1011
相与必然去掉这个1,但是高位的1不动,于是就得出上述结论了

相关文章
|
6月前
|
存储 Unix Linux
C语言时间日期函数的研究与应用
C语言时间日期函数的研究与应用
70 1
|
存储 C语言 C++
软件开发入门教程网之C++ 日期 & 时间
软件开发入门教程网之C++ 日期 & 时间
|
Python
时间管理黑科技:Python中datetime函数助你事半功倍
时间管理黑科技:Python中datetime函数助你事半功倍
140 0
|
决策智能
运筹优化学习07:Lingo的 @if 函数的使用方法
运筹优化学习07:Lingo的 @if 函数的使用方法
运筹优化学习07:Lingo的 @if 函数的使用方法
|
Java C语言
Java编程基础阶段笔记 day04 Java基础语法(下)
day04 Java基础语法 (下) 笔记Notes要点 switch-case语句注意 switch-case题目(switchTest5) 循环执行顺序 if-else 实现3个整数排序 String字符串比较 循环四要素 打印九九乘法表 特殊关键字continue、break switch(表达式) 表达式里仅支持 byte、short、char、int、枚举、String(jdk1.
908 0
|
算法 程序员
&amp;#9733;漫画:优秀的程序员具备哪…
漫画:优秀的程序员具备哪些属性? 东方头条12-2717:20 很多人问我,你是一个优秀的程序员吗? 我还差得远,但我在朝这个目标努力。 那么,怎样才能成为一个优秀的程序员呢? 优秀的程序员往往具有几方面的特点,这些特点里有的更重要,有的作用略低,我以个人的见解,为这些特点从低到高划分了5个星级。
1732 0