수를 이진수로 바꾸었을 때 최초의 0 이 아닌수의 자리 값(가중치)을 출력하는게 문제이다.

예를 들면

12 = 00....01100 정답은 4 (100) ^ | 10 = 00....01010 정답은 2 (10) ^ |


이걸 구하려면 어떻게 해야할까?

잠깐생각하고 

정답은 아래에..































































간단하게 비트연산으로 해결볼 수 있음 ㅇㅇ

어떤 수 x 는 a1(00....000) 이렇게 나타날 수 있음

뭔말인고 하니 1이 최초의 0이 아닌 수를 나타내고 a는 그 이후 숫자임



x=a1(00....000) 라고 하면 (-x) 는 => ~(x)+1 => (~a)0(111...111) + 1 => (~a)1(000....000)


따라서 x & -x 를 하면 정답을 아주 빠르게 구할 수 있음


a1(00....000) (x)

& ~a1(00....000) (-x)

=========================

000010000000000


굳?


아까 올린 자료랑 연계되니까 꼭 참고하셈!

아까 문제 50줄 미만임 풀이