예 : 다음 스왑 쌍 비트 위치 값 후 이진 값 1,010처럼이 방법을 사용하여 0101비트 위치 값을 교환하는 방법 12 34 56 78?
답변
unsigned char swapped = ((original & 85) << 1) | ((original & 170) >> 1);
int pairwise_bit_swap(int a) {
return ((a & 0x55555555L) << 1) | ((a & 0xAAAAAAAAL) >> 1);
}
+1. 합리적으로 명확한 기술을 사용하는 아주 간단한 코드. 이식성 노트로서, 일부 컴파일러는이 코드가 int가 잘리는 원인이되는 충분히 큰 범위의 int를 사용할 수도 있습니다. – Brian
부호있는 정수를 오른쪽으로 시프트하면 부호 비트가 전파됩니다. 즉, a가 음수이면 결과의 첫 번째 비트는 두 번째에 관계없이 1이됩니다. 부호없는 int를 원한다고 생각합니다. 즉, 2의 보수로 나타내는 값이 아닌 비트 패턴에 관심이 있습니다. 만약 당신이 정말로 정수가 필요하다면, 그것을 즉시 캐스팅 할 수 있습니다 : ((a & 0x55555555) << 1) | ((((unsigned int) a) & 0xAAAAAAAA) >> 1) 또는 "수동"으로 지우십시오. ((& 0x55555555) << 1) | (((a & 0xAAAAAAAA) >> 1) & 0x7FFFFFFF) –
또한 32 비트 정수에서만 작동합니다. int가 64 비트라면 마지막에 L을 넣는다는 사실은 도움이되지 않습니다! –
유
부호 숯 A, X, Y, Z (스왑 쌍 비트 1 2 3 4 5 6 7 8 등)에도 위치에 스왑 홀수 위치 비트를 원한다면 ;
a = 2 + 4 + 8 + 128;
x = a & 170;
y = a &85;
z = (x >> 1) | (y < <1);
Z가 답입니다.
마찬가지로 16 비트를 스왑 할 수 있습니다. 위의 예제 시나리오를 해결하십시오 ...
((x << 1) & 0xAAAAAAAA) |((x >>1) & 0x55555555)
여기서 x는 숫자입니다.
- 1. 56 비트 바이너리 문자열에서 DES 키 만들기
- 2. PostScript에서 텍스트를 교환하는 방법
- 3. 프로젝트 오일러 문제 # 78
- 4. BIS의 수출 제한을 피하기 위해 iPhone 앱에서 56 비트 암호화
- 5. JAI : 12 비트 JPEG 파일 읽기
- 6. 파일을 교환하는 가장 좋은 방법
- 7. 터치로 손가락으로 이미지를 교환하는 방법
- 8. 12
- 9. C에서 두 비트 값을 비교하는 방법?
- 10. 해싱 데이터가 56 바이트 이상
- 11. DateTime에서 12 시간을 얻는 방법
- 12. obj-c에서 두 개의 배열을 교환하는 방법
- 13. Objective-C와 PHP 사이에서 데이터를 교환하는 방법
- 14. WPF에서 윈도우 내용을 동적으로 교환하는 방법
- 15. 일식 인스턴스 사이에있는 키 바인딩을 교환하는 방법
- 16. 프로그래밍 방식으로 UIImageView에서 이미지를 교환하는 방법
- 17. jquery를 사용하여 링크의 위치를 교환하는 방법
- 18. svn 로그를 xml/txt 파일로 교환하는 방법
- 19. 리눅스에서 프로세스간에 이진 데이터를 교환하는 방법
- 20. 끌어서 놓기로 항목 위치를 교환하는 방법
- 21. MATLAB에서 행렬의 행과 열을 교환하는 방법
- 22. 양식간에 데이터를 교환하는 방법은 무엇입니까?
- 23. MS Access : 양식이 양식간에 서로 값을 교환하는 방법은 무엇입니까?
- 24. WPF에서 UIElement를 교환하는 컨트롤
- 25. 요소를 교환하는 JQuery
- 26. CGEkeycode (56)에 대해 CGEventPostToPSN이 작동하지 않습니다.
- 27. RGB 레이어에서 2^12 비트를 숨기는 방법
- 28. Youtube가 플래시 콘텐츠로드를 제어하는 방법 (Chrome 12)
- 29. SQL에서 컬럼 당 최대 값을 선택하는 방법은 무엇입니까?
- 30. 위치
결과를 87654321 또는 21436587이 되길 원하십니까? –