寫一段函式,計算無符號32位整數從高到低,第一個‘1’的位置。(例如,0x0F000000的第一個‘1’的位置為5)
阿新 • • 發佈:2019-01-05
使用2分查詢的方法解決,從左到右查詢“1”的位置。
#include <stdio.h> int func(unsigned int data) { int pos = 1; //用於計數,計錄第一個“1”的位置 if((data & 0xffff0000) == 0) //如果data與高16位相與後為零,表示data高16位中不含有“1” { data <<= 16; //將data左移16位,去除高16位 pos += 16; //pos加16,表示前16位中不含有數字“1” } if((data & 0xFF000000) == 0) { data <<= 8; pos += 8; } if((data & 0xF0000000) == 0) { data <<= 4; pos += 4; } if((data & 0xC0000000) == 0) { data <<= 2; pos += 2; } if((data & 0x80000000) == 0) { data <<= 1; pos += 1; } return pos; } int main(void) //測試程式碼 { printf("the pos =%d.\n",func(0xffffffff)); printf("the pos =%d.\n",func(0x00000001)); return 0; }