zoukankan      html  css  js  c++  java
  • C# 整型数和浮点型数的进制转换

    1.十进制转二进制

            /// <summary>
            /// 十进制转二进制
            /// </summary>
            public class Convert10To2
            {
                /// <summary>
                /// 将十进制的16位整型数转换为16位二进制字符串
                /// </summary>
                /// <param name="i"></param>
                /// <returns></returns>
                public static bool TryTo2(short i, out string v)
                {
                    try
                    {
                        v = Convert.ToString(i, 2).PadLeft(16, '0');
                        return true;
                    }
                    catch (Exception)
                    {
                        v = default;
                        return false;
                    }
                }
    
                /// <summary>
                /// 将十进制的32位整型数转换为32位二进制字符串
                /// </summary>
                /// <param name="i"></param>
                /// <returns></returns>
                public static bool TryTo2(int i, out string v)
                {
                    try
                    {
                        v = Convert.ToString(i, 2).PadLeft(32, '0');
                        return true;
                    }
                    catch (Exception)
                    {
                        v = default;
                        return false;
                    }
                }
    
                /// <summary>
                /// 将十进制的64位整型数转换为64位二进制字符串
                /// </summary>
                /// <param name="i"></param>
                /// <returns></returns>
                public static bool TryTo2(long i, out string v)
                {
                    try
                    {
                        v = Convert.ToString(i, 2).PadLeft(64, '0');
                        return true;
                    }
                    catch (Exception)
                    {
                        v = default;
                        return false;
                    }
                }
    
                /// <summary>
                /// 将十进制的32位单精度浮点数转换为32位二进制字符串
                /// </summary>
                /// <param name="i"></param>
                /// <param name="v"></param>
                /// <returns></returns>
                public static bool TryTo2(float i, out string v)
                {
                    try
                    {
                        float j = i;
                        i = Math.Abs(i);
                        int i_left = Convert.ToInt32(Math.Floor(i));//获取整数部分
                        float i_right = i - i_left;//获取小数部分
                        TryTo2(i_left, out string left);//整数部分转换为二进制
                        string right = "";
                        while (i_right != 1)//小数部分转换为二进制
                        {
                            float temp = i_right * 2;
                            right += temp >= 1 ? "1" : "0";
                            if (temp == 1 || temp == 0)
                            {
                                break;
                            }
                            i_right = temp > 1 ? temp - 1 : temp;
                        }
                        string S = j > 0 ? "0" : "1";//获取符号位的二进制
                        if (!left.Contains("1"))
                        {
                            int e = 127 - (right.IndexOf('1') + 1);//获取指数位的十进制
                            TryTo2(e, out string E);//获取指数位的二进制
                            string M = right.Substring(right.IndexOf('1') + 1);
                            if (M.Length > 23)
                            {
                                M = M.Substring(0, 23);
                            }
                            else if (M.Length < 23)
                            {
                                M = M.PadRight(23, '0');
                            }
                            v = S + E.Substring(E.Length - 8) + M;
                        }
                        else
                        {
                            int e = left.Length - left.IndexOf('1') - 1 + 127;//获取指数位的十进制
                            TryTo2(e, out string E);//获取指数位的二进制
                            var z = (left.IndexOf('1') + 1);//获取最高正数位
                            string M = ((z >= left.Length ? "" : left.Substring(z)) + right);//获取尾数
                            if (M.Length > 23)
                            {
                                M = M.Substring(0, 23);
                            }
                            else if (M.Length < 23)
                            {
                                M = M.PadRight(23, '0');
                            }
                            v = S + E.Substring(E.Length - 8) + M;
                        }
                        return true;
                    }
                    catch (Exception)
                    {
                        v = default;
                        return false;
                    }
                }
            }
    十进制转二进制

    2.二进制转十进制

            /// <summary>
            /// 二进制转十进制
            /// </summary>
            public class Convert2To10
            {
                /// <summary>
                /// 将32位二进制字符串转换为十进制的单精度浮点数
                /// </summary>
                /// <param name="i"></param>
                /// <param name="v"></param>
                /// <returns></returns>
                public static bool TryTo10(string i, out float v)
                {
                    try
                    {
                        var s = i.Substring(0, 1);//获取符号位字符串
                        var e = i.Substring(1, 8);//获取指数位字符串
                        var m = i.Substring(9);//获取尾数字符串
                        TryTo10(s, out int S);//把符号转换成十进制
                        TryTo10(e, out int E);//获取指数转换成十进制
                        var m_left = $"1{m.Substring(0, E - 127)}";//获取整数部分二进制字符串
                        var m_right = m.Substring(E - 127);//获取小数部分二进制字符串
                        TryTo10(m_left, out int left);//把整数部分转换为十进制
                        var right = 0f;
                        for (int index = 0; index < m_right.Length; index++)//把小数部分转换为十进制
                        {
                            var temp_value = Convert.ToSingle(m_right[index].ToString());
                            var temp_index = Convert.ToSingle(Math.Pow(2, -(index + 1)));
                            right += (temp_value * temp_index);
                        }
                        v = left + right;//合并整数部分和小数部分
                        v = S == 1 ? -v : v;//添加符号
                        return true;
                    }
                    catch
                    {
                        v = default;
                        return false;
                    }
                }
    
                /// <summary>
                /// 将32位二进制字符串转换为十进制的32位整型数
                /// </summary>
                /// <param name="i"></param>
                /// <param name="v"></param>
                /// <returns></returns>
                public static bool TryTo10(string i, out int v)
                {
                    try
                    {
                        v = Convert.ToInt32(i, 2);
                        return true;
                    }
                    catch
                    {
                        v = default;
                        return false;
                    }
                }
            }
    二进制转十进制
    鸑鷟虽孤,不匹鹜雏。
  • 相关阅读:
    响应式网页设计项目#1---Tribute Page to Kobe and Gigi---致敬科比和Gigi
    Vue---第二部分
    Vue---概述 第一部分
    SaaS应用“正益工作”发布,为大中型企业轻松构建移动门户
    6.24 AppCan移动开发者大会:议程重大更新,报名即将关闭
    【6.24-AppCan移动开发大会倒计时】科大讯飞来了!
    6.24 AppCan移动开发者大会,我爱我家即将闪亮登场!
    惊曝6.24AppCan移动开发大会参展名录,现场礼品超多!
    6.24AppCan移动开发者大会价值30万的展示机会归了谁?
    6月24日AppCan移动开发者大会礼品清单遭泄露
  • 原文地址:https://www.cnblogs.com/zzuwangzhen/p/11059574.html
Copyright © 2011-2022 走看看