Delta Swap의 간단한 설명
4213 단어 비트 연산
우선: Delta Swap이란?
어떤 비트레이트에서, 이 비트레이트의 일부 비트레이트 (연속하지 않을 수 있음) 는 같은 모양으로 덮어쓰지 않은 두 그룹의 변환 작업이 없습니다.
이것은 아래 코드로 실현할 수 있다.
delta_swap.cpptypedef unsigned long long ull;
ull delta_swap(ull x, ull mask, int delta) {
ull t = (x >> delta) ^ x & mask;
return t ^ (t << delta) ^ x;
}
x는 대상의 비트레이트이고 mask는 바꾸고 싶은 2조 부분의 비트레이트 중 하위에 있는 쪽이 차지하는 비트는 모두 1로 채웠다.
mask와mask<이 문장에서 나는 이 코드를 이해하는 방법을 쓸 것이다.
전제 지식(?)
위의 코드를 이해하려면 한눈에 당연한 다음 항등식이 중요하다.
delta_swap.cppA ^ B ^ B = A
순서를 바꿔도 똑같아요.
delta_swap.cpp(B ^ A) ^ B = A
이것을 이용하면 임시 변수를 사용하지 않는 두 변수의 swap을 쓸 수 있습니다.
delta_swap.cpp// A, Bはリテラルの意味で、C, Dは変数の意味で使います
// C, Dの中身を入れ替えます
// 最初CにはA, DにはBが入っているとします。
C ^= D; // CにA^Bが入る
D ^= C; // DはB^(A^B), すなわちAが入る
C ^= D; // (A^B)^A, すなわちB
주제: Delta Swap 설명
먼저
delta_swap.cppull t = (x >> delta) ^ x & mask;
교환하고 싶은 비트꼬치 두 개를 만든 xor라고 할 수 있습니다.
그러므로
delta_swap.cppreturn t ^ (t << delta) ^ x;
이해할 수 있는 것은 원래의 비트레이트 x에서 x나 x라면 (일본어는 혼란스러운) 비트레이트의 swap이 된다는 것이다.끝.
최후
그림이 더럽다.
Reference
이 문제에 관하여(Delta Swap의 간단한 설명), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/rimol/items/1f70b4063500f18ad75a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
typedef unsigned long long ull;
ull delta_swap(ull x, ull mask, int delta) {
ull t = (x >> delta) ^ x & mask;
return t ^ (t << delta) ^ x;
}
전제 지식(?)
위의 코드를 이해하려면 한눈에 당연한 다음 항등식이 중요하다.
delta_swap.cpp
A ^ B ^ B = A
순서를 바꿔도 똑같아요.delta_swap.cpp
(B ^ A) ^ B = A
이것을 이용하면 임시 변수를 사용하지 않는 두 변수의 swap을 쓸 수 있습니다.delta_swap.cpp
// A, Bはリテラルの意味で、C, Dは変数の意味で使います
// C, Dの中身を入れ替えます
// 最初CにはA, DにはBが入っているとします。
C ^= D; // CにA^Bが入る
D ^= C; // DはB^(A^B), すなわちAが入る
C ^= D; // (A^B)^A, すなわちB
주제: Delta Swap 설명
먼저
delta_swap.cpp
ull t = (x >> delta) ^ x & mask;
교환하고 싶은 비트꼬치 두 개를 만든 xor라고 할 수 있습니다.그러므로
delta_swap.cpp
return t ^ (t << delta) ^ x;
이해할 수 있는 것은 원래의 비트레이트 x에서 x나 x라면 (일본어는 혼란스러운) 비트레이트의 swap이 된다는 것이다.끝.최후
그림이 더럽다.
Reference
이 문제에 관하여(Delta Swap의 간단한 설명), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/rimol/items/1f70b4063500f18ad75a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)