正負數十進制轉二進制 位運算 C Language

博主新開了個人站點,你也可以在這看到這篇文章,點擊打開鏈接


今天在論壇上看到一個負十進制數轉二進制的問題,於是小研究了一下,順便學習位運算。。。

我們知道負數的二進制是由其正數的二進制取反(求反碼)再加一(求補碼)得到的,例如:

十進制數528的二進制碼爲:0000001000010000

將其取反(求反碼)後的結果:1111110111101111

將反碼加一(求補碼)後結果:1111110111110000

所以,-528的二進制碼爲1111110111110000

小說一下概念,然後看一個位運算符,按位與(&) :0&0=0 , 0&1=0 , 1&0=0 , 1&1=1

我們知道,奇數的二進制最後一位全部爲1而偶數的二進制最後一位全部爲0,那麼用按位與運算符我們可以很方便地知道一個數是奇數還是偶數,只要讓數字 &1 就可以了,因爲 奇數&1=1 ,而 偶數&1=0

現在看一段代碼,作用是將十進制數轉換爲二進制數。

#include <stdio.h>

int main()
{
int x,i;
scanf("%d",&x);
for(i=31;i>=0;i--) printf("%d",x>>i&1);
system("pause");
}

重點就在 x>>i&1 啦,每次按照能否被二整除來確定0或者1,然後一位一位的移動,這樣處理負數也是可以的,很爽~詳細解釋太麻煩,自己思考吧,嘎嘎~


來自:http://www.slyar.com/blog/decimal-to-binary-digit.html


發佈了29 篇原創文章 · 獲贊 5 · 訪問量 34萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章