Tôi đang cố gắng thực hiện đảo ngược bit trong một byte. Tôi sử dụng mã dưới đâyĐảo ngược bit sử dụng bitwise
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;
}
Nó có thể Reverser bit (trên một máy 32-bit), nhưng có một vấn đề, Ví dụ, đầu vào là 10001111101, tôi muốn nhận được 10111110001, nhưng phương pháp này sẽ đảo ngược toàn bộ byte bao gồm tiêu đề 0s. Đầu ra là 10111110001000000000000000000000. Có phương pháp nào để đảo ngược số thực tế không? Tôi không muốn chuyển đổi nó thành chuỗi và đảo ngược, sau đó chuyển đổi một lần nữa. Có phương pháp toán học thuần túy hay phương pháp vận hành bit nào không?
Trân trọng,
Mặc dù tôi hiểu phương pháp của bạn: nó không thể biên dịch vì bạn sử dụng u4 và chưa xác định nó trong ví dụ của bạn. –
Thêm int u4 = 0x0000FFFF; – user287792
Đây không phải là lý do, tôi chỉ bỏ lỡ điều đó. –