원래이 게시물은 역 양과 염소 작업을 요청했지만이 작업은 내가 필요로하는 것보다 많다는 것을 깨달았으므로 제목을 편집했습니다. expand-right algorithm 만 필요하기 때문에 더 간단합니다. 아래에서 설명한 예는 여전히 관련이 있습니다.오른쪽 비트 알고리즘 확장
원래 포스트 : 나는, 더 나은 어느 역 양 - 및 - 염소 작업을하거나 어떻게 확장 오른쪽 플립을 알아 내려고 노력하고있어
.
가 Hacker's Delight에 따르면, 양 앤 염소 동작에 의해 표현 될 수있다 :
this site 따르면SAG(x, m) = compress_left(x, m) | compress(x, ~m)
, 반전에 의해 발견 될 수있다 : 그러나
INV_SAG(x, m, sw) = expand_left(x, ~m, sw) | expand_right(x, m, sw)
, I '는 수 expand_left 및 expand_right 함수에 대한 코드를 찾으십시오. 그것들은 물론 compress의 역함수이지만 compress는 그 자체로 이해하기가 어렵습니다.
예 :
더, 내가 무엇을 찾고 설명과 같은 8 비트의 집합 고려해야 할
0000abcd
변수를 A, B, C, D는 두 사람이 될 수 있습니다 또는 0입니다. 또한, 비트를 재배치하는 마스크가 있습니다.
0ab00c0d
이는 역 양 및 염소 - 연산으로 수행 될 수있다 : 마스크 01100101
라면 다음 그래서 예를 들어, 생성 된 비트가 재배치 될 것이다. 그러나 위에서 언급 한 사이트의 this section에 따르면 확장 - 오른쪽 - 뒤집기라고하는 더 효율적인 방법이 있습니다. 그의 사이트를 보면 어떻게 할 수 있는지 알 수 없었습니다.
'expand_right'는 Hacker 's Delight (7.5 장)에서 찾을 수 있습니다. "flip"변형을 찾을 수있는 위치를 모르겠습니다. – harold
@harold - 제가 7.5 절에서 보지 못했기 때문에 나는 오래된 버전을 가지고 있다고 생각합니다. 방금 사이트에 다운로드 할 소스 코드가 있다는 것을 알았으므로 지금 살펴보고 있지만 sw 매개 변수가 무엇인지 이해하는 데 어려움을 겪고 있습니다. –
초판. sw = 서브 워드 크기. Sirrida는 항상 해커의 기쁨과 다른 대부분의 장소를 사용합니다. – harold