要計算一個32位整數中最高有效位(MSB,Most Significant Bit)為1的位置,我們可以逐位檢查該整數,從最高位開始直到找到第一個為1的位。下面是一個實現該功能的C語言函數:
#include <stdio.h>
int most_significant_set_bit(int num) {
if (num == 0) {
return -1; // 如果數字為0,則沒有設置的位,返回-1
}
int position = 0; // 用於記錄最高位的位置
for (int i = 31; i >= 0; i--) {
if ((num >> i) & 1) { // 將num右移i位,檢查最低位是否為1
position = i; // 更新位置
break; // 找到最高位為1的位置,跳出迴圈
}
}
// 因為位置是從0開始計算的,要返回給使用者的話,需+1以符合一般的位數標記(從1開始)
return position + 1;
}
int main() {
int num = 444;
printf("最高有效位為 1 的位置為:%d\n", most_significant_set_bit(num));
return 0;
}
這個函數首先檢查是否為0,如果是,則返回-1。然後,它使用一個循環從最高位(第31位)開始檢查,直到第0位。在每次迭代中,它將數字右移i位,並與1進行位與操作來檢查最低位是否為1。如果找到,則記錄該位置,跳出迴圈。位置從0開始計數,因此在返回時加1,以符合一般的位數標記慣例(從1開始)。