首頁 > 後端開發 > C#.Net教程 > C# 中十進位與二進位、十六進位、八進位轉換詳解

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

零下一度
發布: 2017-06-23 15:19:13
原創
8624 人瀏覽過

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;
        }
登入後複製

 

[]

 

以上是C# 中十進位與二進位、十六進位、八進位轉換詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板