首页后端开发ASP.NETC# 中十进制与二进制、十六进制、八进制转换详解

C# 中十进制与二进制、十六进制、八进制转换详解

时间2024-01-30 11:32:03发布访客分类ASP.NET浏览456
导读:收集整理的这篇文章主要介绍了C# 中十进制与二进制、十六进制、八进制转换详解,觉得挺不错的,现在分享给大家,也给大家做个参考。1.十进制 转 二进制 将十进制数不断地除2,将所有余数倒叙填写,即可得到所需二进制数据。 pu...
收集整理的这篇文章主要介绍了C# 中十进制与二进制、十六进制、八进制转换详解,觉得挺不错的,现在分享给大家,也给大家做个参考。1.十进制 转 二进制

将十进制数不断地除2,将所有余数倒叙填写,即可得到所需二进制数据。

        public static string DecimalToBinary(int vDecimal)        {
    /* 将十进制的数 vDecimal 不断地除 2,取余数             * 然后将余数 倒序 填写             */Listint>
     vYuShu = new Listint>
    ();
      // 除 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# 中十进制与二进制、十六进制、八进制转换详解的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

.netcsharp二进制八进制十六进制十进制

若转载请注明出处: C# 中十进制与二进制、十六进制、八进制转换详解
本文地址: https://pptw.com/jishu/592464.html
ASP.NET MVC 遇到JSON循环调用的问题应该怎么解决? 总结MVC中数据验证实例

游客 回复需填写必要信息