1.十進位 轉 二進位 將十進位數不斷地除2,將所有餘數倒敘填寫,即可得到所需二進位數據。 2. 二進位 轉 十進位 將二進位各位上的值(0或1)乘2的(n-1)次方,將每位結果相加。其中,n表示二進位中從右向左的位數(從1開始計); 3. 自帶的轉換方式 C#.Net自帶的進位轉換方式: 4. 十 ...
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; }
[http://www.cnblogs.com/CUIT-DX037/]