如何在C中仅反转整数(32位)的最后8位?
我已经用C实现了下面的函数,但它不能正常工作如何在C中仅反转整数(32位)的最后8位?,c,bit,C,Bit,我已经用C实现了下面的函数,但它不能正常工作 int reverse(int org_num){ int rev_num=0; int i=1; while(i<=8){ int last_bit=org_num&1; rev_num=rev_num|last_bit; rev_num=rev_num<<1; org_num=org_num>>1; i=i+1;
int reverse(int org_num){
int rev_num=0;
int i=1;
while(i<=8){
int last_bit=org_num&1;
rev_num=rev_num|last_bit;
rev_num=rev_num<<1;
org_num=org_num>>1;
i=i+1;
}
return rev_num; }
您可以这样做来可视化代码正在执行的操作
void printBin(int num)
{
const int N = 8;
for (int i = 0; i < 8; ++i)
{
cout << ((num >> i) & 1);
}
cout << "\n";
}
void reverse(int org_num) {
printBin(org_num);
bool bit_back = 0;
bool bit_front = 0;
for (int i = 0, j = 7; i < 4; ++i, --j)
{
// obtaining the bits
bit_back = (org_num >> i) & 1;
bit_front = (org_num >> j) & 1;
// zeroing out the bits
org_num ^= (bit_front << j);
org_num ^= (bit_back << i);
// inserting the bits
org_num |= (bit_back << j);
org_num |= (bit_front << i);
}
printBin(org_num);
}
输入73,它给出146,这是我想要的;但是有146个,它就有72个,这显然是不对的,没关系!我得到了它。上次我不需要把倒过来的号码右移。