C 按位顯示二進位制

2021-10-23 11:14:55 字數 1859 閱讀 1825

在c語言的printf中不能直接顯示乙個數字的二進位制。

但我們可以通過位運算獲取數字每一位的值然後顯示。

我們以25為例子,其二進位制為1101,那麼我們要獲取其最底位的值就是1

通過位與運算1101 & 0001 = 0001可以得到結果。

同理,我們若想獲得其第二位的值也是同理,只需要把第二位變成最小位即可,(1101 >> 1) & 0001 = 0110 & 0001 = 0000

借助此,我們可以寫出如下函式:

void

printbit

(unsigned

int num)

printf

("\n");

}

但是,實際效果卻不太理想。他把顯示的數值倒了過來。

當然,處理的方法有很多,我的方法是再做乙個函式用於把數值倒過來。

我們只需要把num = 00000000000000000000000000011001變成num = reverse_bits(num) = 10011000000000000000000000000000即可。

reverse_bits的**如下:

unsigned

intreverse_bits

(unsigned

int num)

return answer;

}

同理,變數bit是指num的最低位的值,我們要講這個值寫到answer中。

然後,讓answer向左移位一位,效果如下:

10011最底位是0001

寫入到answer:

answer = 0001 & 0000 = 0001

移位:answer = 0010

再重複剛剛的步驟:

bit = 0

answer = 0010

answer = 0100

再重複剛剛的步驟:

bit = 1

answer = 0101

answer = 1010

再重複剛剛的步驟:

bit = 1

answer = 1011

最終便可以轉換完成。

注意:我們使用了unsigned int i=1;i != 0;i <<= 1來計算整數二進位制的總位數。

如,系統計算整數的位數是5位,那麼就會有如下效果:

i = 00001,然後經過4次移位,得到i = 10000。當第五次時i = 00000 = 0,迴圈結束。

注意:25也就是1101,倒過來的結果並不是1011

因為系統內儲存25的二進位制是:00000000000000000000000000011001

所以倒過來後是:10011000000000000000000000000000

當然,不同的編譯器結果可能是不同的。

二進位制位運算

與運算,6 3 2 或運算 6 3 7 異或運算 6 3 5 反碼 6 7 左移 3 2 12 3 2 2 12 右移 3 1 1 3 2 1 無符號右移 3 1 1 3 2 1 按位與,當兩位同時為1時才為1如 1 1 1 1 0 0 0 1 0 6 3相當於 0110 0011 0010 2 按...

更新二進位制位

問題描述 給出兩個32位的整數n和m,以及兩個二進位制位的位置i和j。寫乙個方法來使得n中的第i到j位等於m m會是n中從第i為開始到第j位的子串 日期 2017 8 22 思路 由於題目的提示中已經給出,i到j有足夠的空間放置m,將n中的第i到j之間的數字全部置為0,最後與m異或即可 includ...

二進位制位運算

一 按位與 位全為1,結果才為1 0 0 0 0 1 0 1 0 0 1 1 1 特殊用法 清零。如果想將乙個單元清零,就是使其全部二進位制位為0,只要與乙個各位都為零的數值相與,結果為零 取乙個數中的指定位。如x 10101110要取x的低4位,用x 00001111 00001110即可 二 按...