diff --git a/structure/bitmask.cpp b/structure/bitmask.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..f6c8e2c7c4c71c66fc63013f79006f17a8d6f56b
--- /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); 
+}