Problem

Given an integer x and a bit index n (0-based, least significant bit is n=0), set the n-th bit of x and return the result.

Examples

Example 1

1
2
Input: x = 120 (0b01111000), n = 2
Output: 124 (0b01111100)

Example 2

1
2
Input: x = -120 (two's complement), n = 6
Output: -56 (0b11001000 as signed -56)

Solution

Intuition

Create a mask with only the n-th bit set (1 << n) and OR it with x. OR sets that bit to 1 while leaving other bits unchanged.

Approach

  • Validate n is within a reasonable range for the target word size (e.g., 0 <= n < 32 for 32-bit integers).
  • Compute mask = 1 << n and return ans = x | mask.

Edge cases:

  • Large n may overflow shift width in some languages; prefer using unsigned types or guard n.
  • Negative x works correctly in two’s complement representation for bitwise operations.

Code

1
2
3
4
5
6
class Solution {
 public:
    int setNthBit(int x, int n) {
        return x | (1 << n);
    }
};
1
2
3
4
5
package main

func setNthBit(x int32, n uint) int32 {
        return x | (1 << n)
}
1
2
3
4
5
class Solution {
    public int setNthBit(int x, int n) {
        return x | (1 << n);
    }
}
1
2
3
class Solution:
        def set_nth_bit(self, x: int, n: int) -> int:
                return x | (1 << n)

Complexity

  • ⏰ Time complexity: O(1), single shift and OR.
  • 🧺 Space complexity: O(1).

Method 2 — Guarded set (check then set)

Intuition

If you want to avoid undefined behavior for large n in languages where shifting out-of-range is undefined, perform a guard check before shifting.

Approach

  • If n is outside the allowed range, return x or raise an error.
  • Otherwise compute mask = 1 << n and return x | mask.

Code

1
2
3
4
5
6
7
class Solution {
 public:
    int setNthBit(int x, int n) {
        if (n < 0 || n >= 32) return x; // guard for 32-bit
        return x | (1 << n);
    }
};
1
2
3
4
5
6
7
8
package main

func setNthBit(x int32, n int) int32 {
        if n < 0 || n >= 32 {
                return x
        }
        return x | (1 << uint(n))
}
1
2
3
4
5
6
class Solution {
    public int setNthBit(int x, int n) {
        if (n < 0 || n >= 32) return x;
        return x | (1 << n);
    }
}
1
2
3
4
5
class Solution:
        def set_nth_bit(self, x: int, n: int) -> int:
                if n < 0 or n >= 32:
                        return x
                return x | (1 << n)

Complexity

  • ⏰ Time complexity: O(1).
  • 🧺 Space complexity: O(1).