2017-02-15 5 views
0

우리는 모두 마지막 1 비트를 0으로 설정하는 트릭 n & (n-1)을 알고 있습니다. 예 : 0110 & (0110-1) = 0100. 그 반대? 마지막 0을 1로 설정 하시겠습니까? 그래서 0110은 0111이 될까요?마지막 (최하위) 0 비트를 1로 설정하는 방법

나는 stackoverflow와 온라인에서 많은 양의 검색을 해왔다. 어떤 결과가

+0

비트 조작이 아니지만'x> = 0 '을 할 수 있습니까? (x - x % 2) : (x + x % 2)'. x가 부호없는 경우, 당신은 단지'x - x % 2'를 할 수 있습니다. – Scovetta

+0

비트 단위 또는 1 단위 :'x = x | 1' ... 미안, 내 대답을 보아라, 나는 당신이 단지 오른쪽 비트를 하나에 맞추고 싶다고 생각했다. –

답변

5

그냥 (물론, 정확히하지만 당신은 내가 무슨 뜻인지 얻을) 반대 할 최대 보여줍니다 : 수의 k 번째 비트를 설정 들어 n | (n+1)

0

을 바로 다음 작업을 수행하십시오

n=n|(1<< k) 

여기서 k은 설정하려는 비트입니다.

이 정보가 도움이되기를 바랍니다. 다른 비트 조작에 대한

, 당신은이 질문을 참조 할 수 있습니다 : Manipulation of bits

+0

설정해야 할 비트가 무엇인지 알면 멋지게 작동합니다. –

+0

@ vivek-pratap-chaurasia : 귀하의 대답은 "x의 특정 비트를 1로 설정"을 말합니다. 그러나 문제는 "처음 비트를 설정하지 않고 ** 마지막 0 비트 **를 1로 설정"입니다. 따라서 조작 후 "101"(5)는 "111"(7)이되어야합니다. –

1

한 마지막 제로 비트를 설정하려면, 당신이 하나를 추가 한 다음 비트 OR

(x + 1) | x

-1
자체 수

마지막 비트를 1로 설정하려면 :

x|1 
+0

@ fei-hsueh : 대답은 "x의 마지막 비트를 1로 설정"입니다. 그러나 문제는 "** 마지막 제로 비트 **를 1로 설정"입니다. 따라서 조작 후 "101"(5)는 "111"(7)이되어야합니다. –

관련 문제