C++ 遇见的一些函数

1.位与(&)操作,计算十进制数中的为“1”的位数

int cnt_one(int k)
{
    int c = 0;        //保存位为"1"的数量
    while (k) {
        k = k&(k - 1);        //这样就能实现求出位为"1"的个数
        c++;
    }
    return c;
}

PS:关于位的操作补充:C++ bitset类

(1)bitset定义及初始化

bitset<32> bitvar; //32位,全为0。

(2)bitset操作(bitset<32> bitvec; // 32 bits, all zero

bitset操作
b.any()b中是否存在置为1的二进制位?    bool is_set = bitvec.any();            // false, all bits are zero
b.none()b中不存在置为1的二进制位吗?    bool is_not_set = bitvec.none();      // true, all bits are zero
b.count()b中置为1的二进制位的个数      size_t bits_set = bitvec.count(); // returns number of bits that are on返回二进制位中为“1”的数量
b.size()b中二进制位的个数           size_t sz = bitvec.size(); // returns 32
b[pos]访问b中在pos处的二进制位  for (int index = 0; index != 32; index += 2)  bitvec[index] = 1;把bitvec中的偶数下标的位都置为1
b.test(pos)  b中在pos处的二进制位是否为1?   if (bitvec.test(i))    bitvec[i] is on    //测试某个二进制位是否为“1”
b.set()b中所有二进制位都置为1 bitvec.set();    // set all the bits to 1  for (int index = 0; index != 32; index += 2)   bitvec.set(index);    //设置二进制位的值
b.set(pos)     
b中在pos处的二进制位置为1    
b.reset()b中所有二进制位都置为0      bitvec.reset();    // set all the bits to 0
b.reset(pos)b中在pos处的二进制位置为0
b.flip()b中所有二进制位逐位取反      bitvec.flip();    // reverses value of all bits
b.flip(pos)b中在pos处的二进制位取反      bitvec.flip(0);   // reverses value of first bit
b.to_ulong()b中同样的二进制位返回一个unsigned long值
os << b

b中的位集输出到os流    bitset<32> bitvec2(0xffff); // bits 0 ... 15 are set to 1; 16 ... 31 are 0     cout << "bitvec2: " << bitvec2 << endl;

result:    bitvec2: 00000000000000001111111111111111

转载于:https://www.cnblogs.com/runningRain/p/5935949.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值