Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C中仅反转整数(32位)的最后8位?_C_Bit - Fatal编程技术网

如何在C中仅反转整数(32位)的最后8位?

如何在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;

我已经用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;
   }
   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个,这显然是不对的,没关系!我得到了它。上次我不需要把倒过来的号码右移。