十進位制轉二進位制

2021-07-02 03:07:05 字數 1450 閱讀 5784

宣告:最後一種降冪法頗具魅力,而且與方法二有異曲同工之妙

十進位制轉二進位制的幾種方法

輸入:乙個無符號的十進位制整數

輸出:對應十進位制的二進位制顯示

例如:input = 10,output = 1010

方法一:除二取餘法

forinput != 0

cout << input % 2

input /= 2;

end

輸出順序從低位0到高位(最高的1)依次輸出

方法二:位運算

lowone = input & ~(input - 1)  //得到最低位的1對應的數值

input = input & (input - 1)     //從input中去除最低位的1

方法三:降冪演算法

1.      input > 2^n,(n要盡量大)

2.      input > 2^n ,所以n位對應1

compare( input, 2^(n - 1)), 如果<,輸出0;如果》=,輸出1,且從input中減去後者。

n從n開始連續判斷到0為止。

例子:十進位制整數100,那麼n=6,因為2^6=64<100,2^7=128>100

二進位制       十進位制             二進位制

1100100   100  > 2^6    =  1

100100      36  >  2^5    =  1          (36  =  100-2^6)

00100         4   <  2^4    =  0          (4   =  36-2^5)

0100           4    < 2^3    =  0          (4 維持上一次的結果)

100             4   =  2^2    =  1          (4 維持上一次的結果)

00               0    < 2^1    = 0          (0  =  4-2^2)

0                 0    < 2^0    =  0          (0 維持上一次的結果)

上式中紅色代表二進位制,黑色代表十進位制,所以100的二進位制等於1100100

原理:從高位向低位的順序,判斷每一位是1還是

0.定理:乙個十進位制整數肯定大於等於只留下它的最高位

1(二進位制)對應的十進位制數,例如5(

101)

>4

(100),7

(111

)>4

(100

)。所以,只要滿足上面的定理,就知道最高位的1處於第幾位(從左往右,以0為起始位),即剛才說的「盡量大的n」。然後,減掉這個2^n(最高位1對應的十進位制數),進行下一次的判斷,對比2^(n-1).因為最高的1已經確定在第n位,那麼接下來當然判斷n-1位。而且,前面的減去2^n就等價於去掉原先最高位的1.

二進位制轉十進位制

二進位制轉十進位制方法很多,如字元陣列,指標法等 下面用字串函式的方法實現 二進位制轉十進位制 主要用 到 string函式性質及pow求乙個數的n次方的函式過載 by adengou 2010.08.04 win7 dev c 5.0 vs 2010 通過 include include incl...

十進位制轉二進位制

includeint dg unsigned n,int c 注意 引數型別是unsigned int main 陣列全部初始化為0 printf d n sizeof int unsigned temp,u temp u 4294967295u int tu int u printf u u,tu...

十進位制轉二進位制

將乙個長度最多為30位數字的十進位製非負整數轉換為二進位制數輸出。多組資料,每行為乙個長度不超過30位的十進位製非負整數。注意是10進製數字的個數可能有30個,而非30bits的整數 每行輸出對應的二進位制數。示例1 013 80111 1000 本題輸入的數可能多達30多位,因此無法用整型數來儲存...