C# 中十進位與二進位、十六進位、八進位轉換詳解

來源:互聯網
上載者:User
1.十進位 轉 二進位

將十進位數不斷地除2,將所有餘數倒敘填寫,即可得到所需位元據。

        public static string DecimalToBinary(int vDecimal)        {/* 將十進位的數 vDecimal 不斷地除 2,取餘數             * 然後將餘數 倒序 填寫             */List<int> vYuShu = new List<int>();  // 除 2 過程中產生的餘數集int vTempValue= vDecimal;            // 除 2 過程中產生的商數for (; ; )            {int tempYS = vTempValue % 2;                vYuShu.Add(tempYS);  // 記住餘數vTempValue = vTempValue / 2;if (vTempValue == 0)  // 商數等於0時,結束運算break;            }// 倒序輸出string strBinary = "";for (int i = vYuShu.Count - 1; i >= 0; i--)            {                strBinary += vYuShu[i];            }            Console.WriteLine("Input decimal value:{0}, output binary value:{1}.", vDecimal, strBinary);return strBinary;        }

2. 二進位 轉 十進位

將二進位各位上的值(0或1)乘2的(n-1)次方,將每位結果相加。其中,n表示二進位中從右向左的位元(從1開始計);

        public static int BinaryToDecimal(string vBinary)        {// 首先判斷是否滿足輸入要求int[] vInput = new int[vBinary.Length];for (int i = 0; i < vBinary.Length; i++)            {var tempNum = vBinary[i].ToString();if (tempNum == "0")                {                    vInput[i] = 0;                }else if (tempNum == "1")                {                    vInput[i] = 1;                }else{throw new Exception("輸入參數不正確,位元應僅由:0和1組成");                }            }/*              * 依次乘2的(n-1)次方,再求和             */int vDecimal = 0;for (int i = 1; i <= vInput.Length; i++)            {                vDecimal += (int)(Math.Pow(2, i - 1) * vInput[vInput.Length-i]);            }            Console.WriteLine("Input binary value:{0}, output decimal value:{1}.", vBinary, vDecimal);return vDecimal;        }

3. 內建的轉換方式

C#.Net內建的進位轉換方式:

            int vDecimal = 99;// 【10】 → 【2】string vBinary = Convert.ToString(vDecimal, 2);            Console.WriteLine("十進位數:{0},轉換成二進位:{1}", vDecimal, vBinary);// 【2】 → 【10】int tempDecimal = Convert.ToInt32(vBinary, 2);            Console.WriteLine("位元:{0},轉換成十進位:{1}", vBinary, tempDecimal);

4. 十進位 <=> 十六進位

            int vDecimal = 127;// 【10】 → 【16】string vStrHex = "0x" + Convert.ToString(vDecimal, 16);            Console.WriteLine("十進位數:{0},轉換成十六進位:{1}", vDecimal, vStrHex);// 【16】 → 【10】int tempDecimal = Convert.ToInt32(vStrHex, 16);            Console.WriteLine("十六進位數:{0},轉換成十進位:{1}", vStrHex, tempDecimal);

或者可以:

5. 十進位 <=> 八進位

6. 其它轉換

7. 有符號的數 二進位轉換

對於有加號或減號的資料,在轉換時與上訴略有不同。

1個位元組(8個bits)它不管怎麼樣還是只能表示256個數,因為有符號所以我們就把它表示成範圍:-128 → 127。

用最高位表示符號位,0表示正數,1表示負數。

10000000在電腦中表示最小的負整數。從10000001到 11111111依次表示-127到-1。

負整數在電腦中是以補碼形式儲存的。

        public static int BinaryToDecimalWithSign(string vBinary)        {// 首先判斷是否滿足輸入要求int[] vInput = new int[vBinary.Length];for (int i = 0; i < vBinary.Length; i++)            {var tempNum = vBinary[i].ToString();if (tempNum == "0")                {                    vInput[i] = 0;                }else if (tempNum == "1")                {                    vInput[i] = 1;                }else{throw new Exception("輸入參數不正確,位元應僅由:0和1組成");                }            }// -------- 不足8bits,補足 --------(非必需)if (vInput.Length % 8 != 0) // 補足8b、16b、、、            {int nLen = (vInput.Length / 8 + 1) * 8;int[] nInput = new int[nLen];for (int i = 0; i < nLen - vInput.Length; i++)                {                    nInput[i] = vInput[0];                }                vInput.CopyTo(nInput, nLen - vInput.Length);                vInput = nInput;            }// ---------------------------------// 第1步:首位為1,則為負值int vFH = vInput[0];if (vFH == 1)            {// ---------- 第2步:減去一 ----------for (int i = 1; i <= vInput.Length; i++)                {if (vInput[vInput.Length - i] == 1)                    {                        vInput[vInput.Length - i] = 0;break;                    }else{                        vInput[vInput.Length - i] = 1;                    }                }// ---------- 第3步:取反 ----------for (int i = 0; i < vInput.Length; i++)                {                    vInput[i] = 1 - vInput[i];                }            }// ---------- 第4步:轉成10進位數 ----------int vDecimal = 0;for (int i = 1; i <= vInput.Length; i++)            {                vDecimal += (int)(Math.Pow(2, i - 1) * vInput[vInput.Length - i]);            }if (vFH == 1) // 為負數            {                vDecimal = 0 - vDecimal;            }            Console.WriteLine("Input binary value:{0}, output decimal value:{1}.", vBinary, vDecimal);return vDecimal;        }

[]

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.