From bf5d9c18d3cdd27d8766e151eb67542d197a0908 Mon Sep 17 00:00:00 2001 From: Bruno Freitas Tissei <bft15@inf.ufpr.br> Date: Thu, 1 Feb 2018 13:59:37 -0200 Subject: [PATCH] Add bitmask Signed-off-by: Bruno Freitas Tissei <bft15@inf.ufpr.br> --- structure/bitmask.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 structure/bitmask.cpp diff --git a/structure/bitmask.cpp b/structure/bitmask.cpp new file mode 100644 index 0000000..f6c8e2c --- /dev/null +++ b/structure/bitmask.cpp @@ -0,0 +1,40 @@ +/** + * Bitmask + * Complexity (Time): O(1) + * Complexity (Space): O(1) + */ + +// Set bit in position pos (0 to 1) +void set(ll &bitmask, int pos) { + bitmask |= (1 << pos); +} + +// Set all bits in a bitmask with size n +void set_all(ll &bitmask, int n) { + bitmask = (1 << n) - 1; +} + +// Unset bit in position pos (1 to 0) +void unset(ll &bitmask, int pos) { + bitmask &= ~(1 << pos); +} + +// Unset all bits +void unset_all(ll &bitmask) { + bitmask = 0; +} + +// Get value of bit in position pos +int get(ll bitmask, int pos) { + return bitmask & (1 << pos); +} + +// Toggle value in position pos +void toggle(ll &bitmask, int pos) { + bitmask ^= (1 << pos); +} + +// Get position of least significant 1 +int least_significant_one(ll bitmask) { + return bitmask & (-bitmask); +} -- GitLab