바이트 반전을하려고합니다. 나는 그것은 (32 비트 시스템에서) 비트를 리버 수비트 반전을 사용하여 비트
static int BitReversal(int n)
{
int u0 = 0x55555555; // 01010101010101010101010101010101
int u1 = 0x33333333; // 00110011001100110011001100110011
int u2 = 0x0F0F0F0F; // 00001111000011110000111100001111
int u3 = 0x00FF00FF; // 00000000111111110000000011111111
int u4 = 0x0000FFFF;
int x, y, z;
x = n;
y = (x >> 1) & u0;
z = (x & u0) << 1;
x = y | z;
y = (x >> 2) & u1;
z = (x & u1) << 2;
x = y | z;
y = (x >> 4) & u2;
z = (x & u2) << 4;
x = y | z;
y = (x >> 8) & u3;
z = (x & u3) << 8;
x = y | z;
y = (x >> 16) & u4;
z = (x & u4) << 16;
x = y | z;
return x;
}
아래의 코드를 사용하지만, 문제, 예를 들어, 입력 내가 10111110001를 얻으려면, 10001111101이지만,이 방법은있다 표제 0을 포함하여 전체 바이트를 뒤집을 수 있습니다. 출력은 10111110001000000000000000000000입니다. 실제 수치를 역전시킬 수있는 방법이 있습니까? 나는 그것을 문자열과 리버 서로 변환하고 다시 변환하고 싶지 않다. 어떤 순수한 수학 방법이나 비트 연산 방법이 있습니까?
최고 감사합니다,
나는 귀하의 방법을 이해합니다 : 귀하가 u4를 사용하고 귀하의 예에서 그것을 정의하지 않았기 때문에 컴파일 할 수 없습니다. –
int u4 = 0x0000FFFF; – user287792
이것은 이유가 아니며, 나는 그저 그리워합니다. –