Bit Manipulation Basics AND OR XOR NOT Left Right Shift in DSA Typescript - Time & Space Complexity
Bit manipulation operations are basic steps computers use to handle numbers at the smallest level.
We want to know how the time to do these operations changes as the number size grows.
Analyze the time complexity of the following code snippet.
function bitOpsExample(x: number, y: number): number {
const andResult = x & y;
const orResult = x | y;
const xorResult = x ^ y;
const notResult = ~x;
const leftShift = x << 2;
const rightShift = y >> 3;
return andResult + orResult + xorResult + notResult + leftShift + rightShift;
}
This code performs basic bit operations on two numbers and combines the results.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Each bitwise operation (&, |, ^, ~, <<, >>) processes all bits of the input numbers.
- How many times: Each operation touches each bit once, so the count depends on the number of bits in the numbers.
As the number size grows, the number of bits grows too, so the work grows with the bit length.
| Input Size (bits) | Approx. Operations |
|---|---|
| 8 (1 byte) | ~8 operations per bitwise call |
| 32 (standard int) | ~32 operations per bitwise call |
| 64 (long int) | ~64 operations per bitwise call |
Pattern observation: The time grows linearly with the number of bits in the input numbers.
Time Complexity: O(b) where b is the number of bits in the input numbers.
This means the time to do bit operations grows linearly with the bit length of the numbers.
[X] Wrong: "Bitwise operations take constant time no matter the number size."
[OK] Correct: Actually, the time depends on how many bits the number has, so bigger numbers take more steps.
Understanding bit operation time helps you explain how low-level data handling works and shows you can think about efficiency even in simple steps.
"What if we used fixed-size 32-bit integers regardless of input size? How would the time complexity change?"
Practice
5 and 3? (5 = 0101, 3 = 0011 in binary)Solution
Step 1: Convert numbers to binary
5 in binary is 0101, 3 in binary is 0011.Step 2: Perform bitwise AND operation
0101 AND 0011 = 0001 (only bits set in both numbers remain set).Final Answer:
1 -> Option AQuick Check:
5 & 3 = 1 [OK]
- Confusing AND with OR operation
- Not converting numbers to binary before operation
- Assuming decimal addition instead of bitwise operation
a and b?Solution
Step 1: Identify bitwise XOR operator in TypeScript
The bitwise XOR operator is the caret symbol (^).Step 2: Check each option for correct syntax
let result = a ^ b; uses ^ correctly. let result = a && b; uses logical AND (&&), let result = a | b; uses bitwise OR (|), let result = a % b; uses modulus (%).Final Answer:
let result = a ^ b; -> Option DQuick Check:
Bitwise XOR uses ^ operator [OK]
- Using logical operators instead of bitwise
- Confusing OR (|) with XOR (^)
- Using modulus operator (%) by mistake
const x = 8; // binary 1000 const y = x >> 2; console.log(y);
Solution
Step 1: Understand right shift operation
Right shift (>>) moves bits to the right by the specified number, dropping rightmost bits.Step 2: Apply right shift to 8 (1000 binary)
Shifting 1000 right by 2 bits gives 0010 binary, which is 2 in decimal.Final Answer:
2 -> Option BQuick Check:
8 >> 2 = 2 [OK]
- Confusing right shift with left shift
- Not converting binary to decimal after shift
- Assuming shift adds zeros on left without dropping bits
let a = 5; let b = 3; let c = a <<< b; console.log(c);
Solution
Step 1: Check the bitwise operators in TypeScript
Valid bitwise shift operators are << (left shift) and >> (right shift). There is no <<< operator.Step 2: Identify the invalid operator usage
The code uses <<< which is invalid syntax and will cause an error.Final Answer:
<<< is not a valid bitwise operator -> Option AQuick Check:
Only << and >> are valid shift operators [OK]
- Using triple shift operator like in some other languages
- Assuming semicolons are mandatory for correctness
- Thinking bitwise operators require specific variable types
n = 29 (binary 11101), which expression will toggle the 3rd bit (counting from 0 at right) using bitwise XOR in TypeScript?Choose the correct code snippet.
Solution
Step 1: Understand toggling a bit with XOR
XOR with 1 flips the bit; XOR with 0 leaves it unchanged.Step 2: Create mask for 3rd bit
1 << 3 shifts 1 to the 3rd bit position (binary 1000).Step 3: Apply XOR to toggle the bit
n ^ (1 << 3) flips the 3rd bit of n.Final Answer:
let result = n ^ (1 << 3); -> Option CQuick Check:
XOR with mask toggles bit [OK]
- Using AND or OR instead of XOR to toggle bits
- Incorrect bit position shift
- Using NOT operator incorrectly with XOR
Ready to prove it?
Pass the test and this pattern moves unknown
