1

2 つの変数 x と y があり、最上位の 1 を整列させたいとします。これを C でどのように記述すればよいでしょうか? たとえば、x=11 と y = 1011 があり、x を y に合わせて 1100 にしたいのですが、どうすればよいでしょうか?

4

2 に答える 2

2

BitScanReverse (または GCC などのコンパイラの適切な組み込み関数) を実行__builtin_clzし、大きい方から小さい方を減算し、小さい方をその差だけ左にシフトします。

于 2012-10-03T06:22:29.033 に答える
0

paulsm4 が提案したように、数値の最上位の「SET」ビットを決定し、シフトすることができます。それから派生した、かなり単純化されたバージョンは次のようになります:-

int Num1_bit_count = 0,Num2_bit_count = 0;
int Num1 = 0b1100, Num2 = 0b0011, temp = 0;

    temp = Num1;  //Let's copy it in other variable to save the value of Num1
     //Count Number of bits in Num1
     while(temp > 0)
     {
         temp = temp >> 1;
         Num1_bit_count++;

     }
    //Same for Num2
    temp = Num2;  //Let's copy it in other variable to save the value of Num2
     //Count Number of bits in Num1
     while(temp > 0)
     {
         temp = temp >> 1;
         Num2_bit_count++;

     }

  if(Num1_bit_count > Num2_bit_count)
   {
       Num2 = Num2 << (Num1_bit_count - Num2_bit_count);

   }
  else if(Num2_bit_count > Num1_bit_count)
   {
       Num1 = Num1 << (Num2_bit_count - Num1_bit_count);

   }
于 2012-10-03T06:29:51.607 に答える