Kyopro Library
 
読み取り中…
検索中…
一致する文字列を見つけられません
bit.hpp
[詳解]
1#include "../../kyopro_library/template.hpp"
2
3/// @brief ビット演算
4namespace Bit{
5 /// @brief 1であるビットの個数を返す
6 int PopCount(int n) { return __builtin_popcount(n); }
7
8 /// @brief 1であるビットの個数を返す
9 int PopCount(ll n) { return __builtin_popcountll(n); }
10
11 /// @brief popcountの偶奇を返す
12 int Parity(int n) { return __builtin_parity(n); }
13
14 /// @brief popcountの偶奇を返す
15 int Parity(ll n) { return __builtin_parityll(n); }
16
17 /// @brief 最上位ビットの位置を返す
18 int TopBit(int n) { return n ? 31-__builtin_clz(n) : -1; }
19
20 /// @brief 最上位ビットの位置を返す
21 int TopBit(ll n) { return n ? 63-__builtin_clzll(n) : -1; }
22
23 /// @brief 2進表現の長さを返す
24 int BitLength(int n) { return n ? 32-__builtin_clz(n) : 1; }
25
26 //// @brief 2進表現の長さを返す
27 int BitLength(ll n) { return n ? 64-__builtin_clzll(n) : 1; }
28
29 /// @brief 最下位ビットの位置を返す
30 int LowBit(int n) { return n ? __builtin_ctz(n) : -1; }
31
32 /// @brief 最下位ビットの位置を返す
33 int LowBit(ll n) { return n ? __builtin_ctzll(n) : -1; }
34
35 /// @brief 2のべき乗か否かを返す
36 bool IsPowerOfTwo(int n) { return n && (n&-n)==n; }
37
38 /// @brief 0~n-1 ビットを立てたビットマスクを返す
39 ll Mask(int n) { return (1LL<<n)-1; }
40
41 /// @brief iビット目が立っているか否かを返す
42 bool HasBit(ll n,int i) { return (n>>i&1); }
43
44 /// @brief 整数 n の2進表現を返す
45 /// @param len ビット数
46 /// @param rev 反転するか否か
47 string ToBinary(ll n,int len=32,bool rev=false) {
48 string ret;
49 for(int i=0; i<len; i++) ret+=HasBit(n,rev?len-1-i:i)?'1':'0';
50 return ret;
51 }
52}
ビット演算
Definition bit.hpp:4
bool HasBit(ll n, int i)
iビット目が立っているか否かを返す
Definition bit.hpp:42
int PopCount(int n)
1であるビットの個数を返す
Definition bit.hpp:6
int TopBit(int n)
最上位ビットの位置を返す
Definition bit.hpp:18
int TopBit(ll n)
最上位ビットの位置を返す
Definition bit.hpp:21
int Parity(int n)
popcountの偶奇を返す
Definition bit.hpp:12
bool IsPowerOfTwo(int n)
2のべき乗か否かを返す
Definition bit.hpp:36
int BitLength(ll n)
Definition bit.hpp:27
int PopCount(ll n)
1であるビットの個数を返す
Definition bit.hpp:9
int Parity(ll n)
popcountの偶奇を返す
Definition bit.hpp:15
int BitLength(int n)
2進表現の長さを返す
Definition bit.hpp:24
string ToBinary(ll n, int len=32, bool rev=false)
整数 n の2進表現を返す
Definition bit.hpp:47
ll Mask(int n)
0~n-1 ビットを立てたビットマスクを返す
Definition bit.hpp:39
int LowBit(ll n)
最下位ビットの位置を返す
Definition bit.hpp:33
int LowBit(int n)
最下位ビットの位置を返す
Definition bit.hpp:30