私のニーズ:
非負の unsigned long a については、
入力 a = 5; Ans は 3 である必要があります
入力 a = 12; Ans は 4 である必要があります
入力 a = 1; Ans は 1 でなければなりません
入力 a=0 Ans は 0 でなければなりません
つまり、左から最も重要な 1 つの位置を見つけます。
私が試したこと:
int count = 0;
if( a!=0 )
do{
count++;
}while( a >>= 1 );
問題 while ループとシフトのために時間がかかります。
提案された方法 4 バイトがどのようにメモリに格納されているかがわかっている場合 (char* を使用)、最上位の 1 を含むバイトを取り出します。したがって、最悪の場合、答えを見つけるには最大 8 回のシフトで十分です。