博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#实现10进制转2进制
阅读量:6466 次
发布时间:2019-06-23

本文共 1719 字,大约阅读时间需要 5 分钟。

这几天在复习计算机原理,看到二进制忽然想到二进制转10进制的公式,然后转念一想10进制转二进制的公式好像没印象,那索性自己写出来。

结果学渣的我发现,并不能写出来!什么数列,对数,xx函数忘得一干二净,而且需要有需要判断的地方,于是崩溃了,以前代数题并没写过条件啊~

索性用C#代码搞出来(虽然在C#里有方法直接转换)

 

 

二进制值 10进制值 公式
0 0  0
1 1
10 2 f(2)=10^1 =10
11 3 f(3):比 log₂3最小的整数位1,记录10^1,并3-(2^1)=1,f(1)=1,则最终结果为10^1+f(1)=10+1=11
100 4  f(4): log₂4=2,整数,直接返回10^2
101 5  f(5):比 log₂5最小的整数位2,记录10^2,并5-(2^2)=1,f(1)=1,则最终结果为10^2+f(1)=100+1=101
110 6  f(6):比 log₂6最小的整数位2,记录10^2,并6-(2^2)=2,f(2)=10,则最终结果为10^2+f(2)=100+10=110
111 7  ………………
1000 8  ………………
1001 9  ………………
1010 10  ………………
1011 11  ………………
1100 12  ………………
1101 13  ………………
1110 14  ………………
1111 15  f(15):比 log₂15最小的整数位3,记录10^3,并15-(2^3)=7,f(7)=111,则最终结果为10^3+f(7)=1000+111=1111
10000 16  f(16):比 log₂6最小的整数位4,整数,直接返回10^4

公式是这样子的。 假如求10进制数n的二进制,先求以2为底的n的对数log₂N,判断log₂N是否为为整数,如果为整数直接返回10^log₂N,否则求出比log₂N最小的整数t(如1.001取1,2.02取2,3.9取3)。求出并记录10^t,然后将n减去2^t并重复执行以上步骤,返回的值与记录的10^t相加。

以上我们设这个函数为f(n);

贴代码,无疑,用了递归~

private double DecimalToBinarySystem(int decimalNumber)        {            double standard = 0;            if (decimalNumber==0)            {                return 00;            }            if (decimalNumber==1)            {                return 01;            }            var doubleValue = (double) decimalNumber;            var logarithm = Math.Log(doubleValue,2 );            var logFormat = Math.Truncate(logarithm);                        var baseNum = Math.Pow(10, logFormat);            if (logarithm.Equals(logFormat))            {                return baseNum;            }            var leftNumber = doubleValue - Math.Pow(2, logFormat);            return baseNum + DecimalToBinarySystem((int)leftNumber);        }

仅测试过大于等于0的整数,负数和小数未测试。

只是乐于思考一下,抛砖引玉欢迎指正

 

转载于:https://www.cnblogs.com/MLGB/p/6895426.html

你可能感兴趣的文章
Java:正则表达式的详解
查看>>
【转】互联网时代的关键人物:大公司的小领导
查看>>
Android有效解决加载大图片时内存溢出的问题
查看>>
WPF笔记(2.7 文字布局)——Layout
查看>>
Java finally语句到底是在return之前还是之后执行?
查看>>
GPUImage API文档之GLProgram类
查看>>
C# 断点续传原理与实现
查看>>
C#中使用命名管道进行进程通信的实例
查看>>
Lintcode: Minimum Subarray
查看>>
内存问题 动态加载地址和运行时地址
查看>>
LINK : fatal error LNK1181: 无法打开输入文件“..\..\lib\Release\opencv_ocl249.lib”
查看>>
更改MySQL数据文件目录位置
查看>>
android假设重写onDraw实现一个相似TextView能够显示表情和链接的控件(二)
查看>>
Java魔法堂:注解用法详解——@SuppressWarnings(转)
查看>>
unity, GUIStyle and Skin
查看>>
link和@import的区别
查看>>
hdu2159 Fate 二维背包
查看>>
Tengine笔记3:Nginx的反向代理和健康状态检查
查看>>
css3中关于伪类的使用
查看>>
动态调用webservice时 ServiceDescriptionImporter类在vs2010无法引用的解决方法
查看>>