[C]將一個十進制數的二進制反轉並輸出

描述

 以下提供三種方式(第三種偶然想到的, 哈哈哈, 還挺簡潔的)

 第一種方式
    這個解法比較常規, 思路是初始化一個數組(默認值爲0),
然後將每一位取出來, 替換數組中相應的值, 因爲取二進制的時候
是從右往左取, 並且存入數組的時候是從左往右存, 那麼得到的數
組直接就是逆序後的序列.

void reverse_bits(unsigned int value)
{
	int result_buffer[32] = { 0 };
	int* Tag = result_buffer;
	while (value != 0)
	{
		int temp = value / 2;
		*Tag++ = value - temp * 2;
		value /= 2;
	}
	int i;
	for (i = 0; i < 32; i++)
	{
		printf("%d", result_buffer[i]);
	}
}

第二種方式

    這個是上一種方法的改進版, 採用了一種獨特的方式,
採用了二進制數對原數進行校驗(即2的次方, 這樣用來校驗的
數以二進制的形式只有一位是1), 用邏輯與的方式將這個十進制
數記錄下來, 並且存入數組中.

void reverse_bits(unsigned int value)
{
	int result_buffer[32] = { 0 };
	int i;
	for (i = 0; i < 32; i++)
	{
		int temp = (value & (int)pow(2,i)) != 0 ? 1 : 0;
		result_buffer[i] = temp;
	}

	for (i = 0; i < 32; i++)
	{
		printf("%d", result_buffer[i]);
	}
}

第三種方式

    這個方法是基於第二種方法上做了一些改進, 我們既然能夠

求出每一位, 那麼我們爲什麼不能直接用二進制拼湊這個數呢?

只需要簡單的左移, 相對於得到一個數組的侷限性, 一個具體的

數值顯然更加靈活, 並且更加符合題意.

unsigned int reverse_bits(unsigned int value)
{
	unsigned int result = 0;
	int i;
	for (i = 0; i < 32; i++)
	{
		result += (((value & (int)pow(2, i)) != 0 ? 1 : 0) << (31-i));
	}
	printf("%u", result);
	return result;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章