一、用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分)

#include "stdio.h"
#include "stdlib.h"
#include "math.h"

int most_significant_set_bit(int num) {
    for(int i=31; i>=0; i--) {
        if(num / pow(2.0, i) >= 1) {
            return i;
    }
    return -1;
}
int main(void) {
    int num = 444;
    printf(" %d 的最高有效位為1的位置為: %d \n", num, most_significant_set_bit(num));
    return 0;
}
不知道這樣答題會不會被判0分~~因為寫太少@@~~
應該不會禁止使用math.h函式庫吧~~
這是很簡單的邏輯問題~~
因為是32位元(n=32)系統,所以就使用2的n-i次方除以num(i=1,2,3...,32),(不管餘數)找到商為1的就是最高位元。
pow是math.h內含的函式,pow(x,y)代表:x的y次方。

arrow
arrow
    全站熱搜

    伊 發表在 痞客邦 留言(0) 人氣()