I was doing a question on leetcode and the part of it's solution required to find the rightmost set bit of an integer(it can also be negative).It is given that integer is a 32 bit number in constraints.
While finding out the position of right most bit using below function int findPos(int allXor){ int flag=1; int i; for( i=0;i<=32;i++) if((1<<i) & allXor ) break; return i; }
i am unable to understand that how 1<<32
is going to work. It is because we are given a 32 bit number and 1<<32
would represent the integer which has it's 33rd bit set right? when i use i<=31 in this question i get the wrong answer.
Can someone pls explain what is happening here?
QUESTION LINK: https://leetcode.com/problems/single-number-iii/
FULL CODE: ``` class Solution { public: int findPos(int allXor){ int flag=1; int i; for( i=0;i<=32;i++) if((1<<i) & allXor ) break; return i; }
vector<int> singleNumber(vector<int>& nums) { if(nums.size()==2) return nums; vector<int> ans; int allXor=0; for(auto it: nums) allXor^=it; int bitPos=findPos(allXor); // cout<<allXor<<" "<<bitPos<<endl; vector<int> part1,part2; for(auto it: nums){ if((1<<bitPos)&it) part1.push_back(it); else part2.push_back(it); } int element1=0,element2=0; for(auto it : part1) { element1^=it; cout<<it<<" "; } cout<<endl; for(auto it : part2) { element2^=it; cout<<it<<" "; } return {element1,element2}; }
}; ```