zoukankan      html  css  js  c++  java
  • C++ 的位运算:__builtin, bitset

    • int __builtin_ffs (unsigned int x)
      返回二进制表示中 x 的最后一位 (1)(最右边的)是从后向前第几位,比如 (7368(1110011001000)) 返回 (4)
    • int __builtin_clz (unsigned int x)
      返回二进制表示中前导 (0) 的个数。
    • int __builtin_ctz (unsigned int x)
      返回二进制表示中末尾 (0) 的个数。
    • int __builtin_popcount (unsigned int x)
      返回二进制表示中 (1) 的个数。
    • int __builtin_parity (unsigned int x)
      返回 x 的奇偶校验位,也就是 x(1) 的个数模 (2) 的结果。

    这些函数都有相应的 unsigned longunsigned long long 版本,只需在函数名后面加上 lll 即可,如 int __builtin_clzll


    bitset 定义在 <bitset> 库中。

      bitset<8> b1; // [0,0,0,0,0,0,0,0]
      bitset<8> b2(42);          // [0,0,1,0,1,0,1,0]
      bitset<17> bs(0xfff0);      // [1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0]
      string bit_string = "110010";
      bitset<8> b3(bit_string);       // [0,0,1,1,0,0,1,0]
      bitset<8> b4("110010");       // [0,0,1,1,0,0,1,0]
    
      cout << b4[0] << b4[1] << b4[2] << b4[3] << b4[4] << endl; // 0,1,0,0,1
      cout << b3 << endl; // 00110010 (1. 不是 50! 2. 会输出前导 0! )
    
      b4[0] = true; // b4 = [0,0,1,1,0,0,1,1]
      b4.set(3);    //      [0,0,1,1,1,0,1,1]
      b4.set(5);    //      [0,0,1,1,1,0,1,1] , 并没有变化
      b4.unset(4);  //      [0,0,1,0,1,0,1,1]
      b4.flip(1);   //      [0,0,1,0,1,0,0,1]
      b4.flip(1);   //      [0,0,1,0,1,0,1,1]
      b4.flip(2);   //      [0,0,1,0,1,1,1,1]
      b4.flip(0);   //      [0,0,1,0,1,1,1,0]
    
      cout << b2.size() << ',' << bs.size << endl;// 8,17
      cout << b2.count() << endl;// 3
      cout << bs.count() << endl;// 13
    
      string
    

    另外,bitset 支持类似一个整数的操作,可以比较相等还是不等(但不能比较谁大谁小),可以左移右移,可以按位取与或非异或。但是一个 bitset 不能和一个真正的整数(如 int 型整数)进行这些操作

  • 相关阅读:
    HDU 1874 畅通工程续(dijkstra)
    HDU 2112 HDU Today (map函数,dijkstra最短路径)
    HDU 2680 Choose the best route(dijkstra)
    HDU 2066 一个人的旅行(最短路径,dijkstra)
    关于测评机,编译器,我有些话想说
    测评机的优化问题 时间控制
    CF Round410 D. Mike and distribution
    数字三角形2 (取模)
    CF Round410 C. Mike and gcd problem
    CF Round 423 D. High Load 星图(最优最简构建)
  • 原文地址:https://www.cnblogs.com/P6174/p/8759249.html
Copyright © 2011-2022 走看看