统计整数转换二进制后含有多少个1

本文介绍了统计整数转换为二进制后含有多少个1的方法,包括使用右移、与运算以及减1再与运算的策略。还提到了C++中的`bitset`类以及字符串与整数之间的转换。这些技巧在计算机科学中常用于位操作和二进制数据处理。

统计整数转换为二进制后含多少个1 的问题

整数右移

但不适用负数,当x为负数时,一直进行右移运算,最终这个数字会编程0XFFFFFFFF,从而陷入死循环

int getNumber(int x)
{
    int count = 0;
    while(x)
    {
        count += x & 1;
        x >>= 1;      //右移
    }
}

整数 与 左移的1 相&

int getNumber_1(int x) {
  int32_t count = 0;
//   unsigned int flag = 1;
  while (x) {
    if (x & 0x80000000) {
      ++count;
    }
    x <<= 1;  //左移
  }
  return count;
}

减1再相&

把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0。那么一个整数的二进制表示中有多少个1,就可以进行多少次这样的操作。

每次减一相与,都是剔除最右边的1,直到没有1可以剔除。

    int  getNumber_1(int i) 
    {
        int count  = 0;
        while (i)
        {
            ++count;
            i &= (i - 1);
        }
        return count;
    }

处理二进制的类bitset

头文件

#include<bitset>

bitset是一种类模板,其定义时需要规定对象的位长度

bitset<n> b;                //b有n位,每位都为0  
bitset<n> b(u);            //b是unsigned long型u的一个副本  
bitset<n> b(s);             //b是string对象s中含有的位串的副本  
bitset<n> b(s, pos, n);     //b是s中从位置pos开始的n个位的副本 

string 与 int 湘湖转换

std::to_string()

std::stoi() std::stol std::stoll

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值