二进制转换十六进制方法 C语言十进制转换二进制( 二 )


– 101010=3
– …
这样的确可以表示所有正整数了,但…0除了它自身完全没用上啊,0101=2那11也=2啊,而巨大的数写起来也太长了,会占用很多计算机资源的,有没有什么更好的办法?试试2!
嗯?好像还可以?:
– 0101=5
– 100111=39
– 101010=50
– …
是能行啊!前面的位数能够组成所有的偶数,而最后一位的1加上前面所有的偶数组成所有的奇数,把10变成2也能组成所有数字!
这样每一位的利用效率是高了不少,但能不能再高效些?换成3?
嗯,看起来还行,但它能不能表示小正整数?看看他能表示除了0以外最小的正整数就行,他能表示1吗?
嗯,说了跟没说一样呢_(:з」∠)_,那看看2
嗯?2没了?再往左排数字只能让它越来越大.看来3不行,4呢?
哇,这没的更过分了,2没了,3都没了欸,这么下去没掉的数字只会是越来越多吧.
权衡之下,最有效的还是把10变成2啊,既然是把十进制的十变成二,那就叫二进制吧.
虽然0和1已经能表示所有正整数了,但我想让电脑计算两个数的时候还是不能直接写上233+666就行了的,因为最终电脑计算的还是0和1,我得把正整数变成0和1才行,怎么办呢…对了!因为二进制是由二乘出来的,我只要知道一个正整数里有几个2就行了,如果这个正整数是奇数那最后一位二进制数就是1,是偶数就是0
那怎么知道一个数里有几个2?把它分成两份就行了,一直分,直到分到每一份都是2为止!从数学上来讲就是除以2
嗯,6里有3个2,就是110,再看看奇数
呃…等等,我可没想过小数啊…但我们有规定过每一份都一定是2,那就把这7里的2给取出来先?然后还剩下个1
嗯,只要把1取出来不就好了吗,7就是111啦
再看看这方法对大数字有没有效
呃…56是由28个2组成的不错,但28个2…到底是2的几倍呢,要是硬算也不是算不出来,但如果56这个数再大了,恐怕就根本算不出来了,或者得拿着对照表一个个对,而更大的,许多许多位的则是根本没法算了,为了保证什么正整数都能计算,得再想个办法…再用2拆一次?到时候还原成十进制的时候再乘就好,也是基于2的,不违规.
嗯…这方法的确可行,但这并没有让事情变得简单,反而更加麻烦了,7的二进制111乘2并算不出二进制,甚至算十进制都很费劲,难道就没有什么更好的方法了吗…..?
啊,是啊,还能这么做,如果我把每一份都继续拆分,再还原
还原,还原,还原,还原
然后再代入、还原
通过对还原过程的观察我们发现,最终的1将会被还原成2的最大倍数,而在其次的1将会被还原成下一位2的倍数,最后一位为1,这对所有数都成立吗?
所有数被2乘,最终只会有两种结果
而这两种都能被拆分成唯一的结果
于是这对所有数都成立,而最终的1将是2的最大倍数,而向前的依次减一个2的倍数,从而只需要从后往前数余数,没有余数则为0,即可将十进制转位二进制 。
感谢观看,起来走两步休息休息 。
知识来源(真不是广告嗷谁会给没粉丝的人广告,我的知识除了符号以外基本上全是这本书给的,如果你能读懂我写的这摊,那你读懂这本书(我看完的部分,大概一半)是没问题的(我这篇的文风也是学这本书的)):


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: