阿摩線上測驗 登入

申論題資訊

試卷:99年 - 099年高等三級暨普通普_資訊處理#29647
科目:程式設計
年份:99年
排序:0

申論題內容

一、用 C 語言撰寫一個函式 int most_significant_set_bit(int num),它能將一個 32-bit 整 數的最高有效位(The most significant bit)為 1 的位置計算出並回傳出來,如果全 為 0,則回傳 -1。例如數值 444 以二進位表示為 00000000 00000000 00000001 10111100,所以它回傳出最高有效位為 1 的位置為 8,也就是說 bit 8。(25 分)

詳解 (共 1 筆)

詳解 提供者:hchungw

要計算一個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開始)。