Maison >développement back-end >Tutoriel C#.Net >Explication détaillée de la conversion décimale en binaire, hexadécimal et octal en C#
1. Convertissez le nombre décimal en binaire
Divisez continuellement le nombre décimal par 2 et remplissez tous les restes à l'envers pour obtenir les données binaires requises.
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. Convertir le binaire en décimal
Multiplier la valeur binaire (0 ou 1) par 2 élevée à la puissance (n-1), et Chaque résultat est additionné. Parmi eux, n représente le nombre de chiffres de droite à gauche en binaire (en comptant à partir de 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. Méthode de conversion intégrée
Méthode de conversion de base intégrée de 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. Décimal <=> 🎜> 6. Autres conversions 7. Conversion binaire signée Pour les données avec des signes positifs et négatifs, faites appel à la conversion Légèrement différente. 1 octet (8 bits) ne peut de toute façon représenter que 256 nombres. Parce qu'il est signé, nous l'exprimons sous forme de plage : -128 → 127. Utilisez le bit le plus élevé pour représenter le bit de signe, 0 représente un nombre positif et 1 représente un nombre négatif. 10000000 représente le plus petit entier négatif de l'ordinateur. De 10000001 à 11111111, cela signifie -127 à -1. Les entiers négatifs sont stockés sous forme de complément à deux dans les ordinateurs. 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);
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;
}
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!