C语言十进制转换二进制(二进制转换十六进制方法)
数学不好,尽量简洁,逻辑理解,应该有比我写的这些更好的论文,请。
基于简洁,同一个数的数次相乘被简写成在那个数的左上角放上一个小数字来代表那个数相乘的次数。
举个例子,比如2
坐上的n代表有几个2相乘,右下的1,2,3…n指一直数到n,数出一共有几个2
受制于现实,传统计算机只能使用0或1表示数字来进行计算,但只有0和1所能计算的数字太少了,于是为了计算更多数字,需要通过0和1去表示更多数字,通过阿拉伯数字的经验,我们知道可以通过把数字排起来表示更多数字
n仍是数有几个数的意思。
这样排列我们就能制作出长度任意而不同的排列数字块了,如果把每一堆数字块当成一个数字,我们就能通过排列组合排列出不相同的所有数字了,好耶!
那接下来的问题就是给予排列的数字块意思,也就是一块特定排列的数字块到底是什么数,比如:
我们当然也可以随便给,比如上边这个0010001就是8,1000101是5,101101是7等等,但这样要记住的特定排列太多了,而我们想要尽可能方便直观简单快速的明白一个排列数字块到底是什么意思。
还是阿拉伯数字的经验,我们知道一个数排在另一个数前面代表这个数是几十几而再在前面排一个是几百几,也就是说:
出于简洁,就排列三个数,但规律也逐渐出现了
我们用十进制拆分了十进制!甚至还能再拆
拆的更离谱些!
更大!更好!更快!更强!
嗯…拆到这种程度应该差不多了,×1可以无限加,但也就只有阻碍阅读的作用了,还是撤了吧.都知道2就是1+1,3就是1+1+1,好像也没什么必要.但第一次拆分我们能发现100能被拆成10×10,那1000能不能被拆呢?也可以,只要是这种往10后面排0的都能被这么拆
而
简写中的2可以换成任何一个数字,10当然也可以
于是上面的规律就可以简写成这样
但通过这样写,我们就能将极其大的数写的很短
假如我们想写出100000000,只要写成10加上右上角的短数字8就行了
并且还能写出”无限”,即是规律本身!
通过将n的数字改变,我们就能写出任意一个由10×10组成的数字
你可能会怀疑这不过是在做符号的游戏,而不一定能得出正确的结果.但如果你一个一个将其拆分,它们仍然还是原来的数本身,而只是换了个写法,仍是正确的
话 题 逐 渐 跑 偏,回到把用0和1构成更多数的目标上来,看看我们能用已经发现的规律做些什么
既然阿拉伯数字是这个规则,那它对其他数字应该也会有一些效果?不管了,直接套就完了!
因为0乘任何数都是0,所以把它们省略掉
那么,0010001就是11了!这样我们就能表达很多数了!比如:
– 0101=101
– 100111=100111
– 101010=101010
– ..?
这不跟没有一样吗喂,只是把前面的0省掉,这不跟十进制一模一样吗,啊,好吧,就是直接套的十进制啊…
虽然我们已经能表示很多数了,但跟十进制一比还是有很多数没能表现,为了完全实现计算的用途,还需要用0和1表现更多数才行.
该怎么办呢,怎么办呢,0和1是不能变的,目前能随便变的只有10,既然我们想让0和1表示所有数,那如0,1,2,3…这种最小的正整数是不能放过的,那就把10换成0试试?
额…明显不行,这样不管加多少1或0得出来的数只能看最后一位,只有0或1啊,太少了
那换成1试试?
嗯哼?好像可以!:
– 0101=2
– 100111=4
– 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,即可将十进制转位二进制。
感谢观看,起来走两步休息休息。
知识来源(真不是广告嗷谁会给没粉丝的人广告,我的知识除了符号以外基本上全是这本书给的,如果你能读懂我写的这摊,那你读懂这本书(我看完的部分,大概一半)是没问题的(我这篇的文风也是学这本书的)):
原创文章,作者:admin,如若转载,请注明出处:https://www.qq65hfghe5.com/tg/67499.html