문제

이진 번호로 다음을 수행하는 방법에 대한 통찰력이있는 사람이 있다면 궁금합니다.

전환하다

   01+0 -> 10+1 (+ as in regular expressions, one or more)
    01 -> 10  
    10 -> 01  

그래서,

10101000010100011100
01010100101010100010

그리고 이것이 간단한 반전이 아니라는 것을 명확히하기 위해 :

000000100000000000
000001010000000000

나는 Regex를 생각하고 있었지만 이진수로 일하고 있으며 그런 식으로 유지하고 싶습니다. 그만큼 비트 twiddling 핵 페이지는 나에게 통찰력을주지 않았습니다. 이것은 분명히 Cellular Automata의 본질이 있습니다. 그렇다면 누구든지 이것을 처리 할 수있는 몇 가지 작업을 가지고 있습니까? (코드가 필요하지 않습니다. 어떻게 해야하는지 알고 있습니다).

도움이 되었습니까?

해결책

X가 당신의 변수라고 가정 해 봅시다. 그러면 당신은 다음과 같습니다.

unsigned myBitOperation(unsigned x)
{
    return ((x<<1) | (x>>1)) & (~x);
}

다른 팁

c/c ++의 twidle은 ~입니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top