进制是一种进位的计数方法,通常逢x进一。
为什么要有进制呢?
以数指头举例,两只手只有十个指头,最多能数到9,那如果是10怎么办呀?于是就拿根树枝放在地上表示1,然后用手指头再从0开始数。地上的1和手指头共同组成了10~19的数。
地上的树枝就是被进了一位,而这个过程就是发明10进制的过程,这个不知名的数学家很伟大。
进制与我们的生活息息相关,千年以前,我们中华的老祖宗就发现了进制—太极,以及由太极发明的解读人生的哲学二进制码—八卦。
我想如果老祖宗知道我们没有用他的发现发明计算机,而是天天拿来给人算命的话,估计要气死了吧!
时间是个很伟大的存在,我们人类用24进制来计算时间,用4进制来区分4季,用12进制来化分月份。我们用进制来了解时间的一切。
计算机中则用2进制,8进制和16进制来为我们服务。由于我们人类天生长着10个指头,10进制对我们来说是最佳的计算方式。为了与计算机能够相处愉快,计算机科学家研究出来进制的换算。
进制换算
10进制转2进制的方法为除2取余法
简单来说,就是一个数除以2,一直除到不能除为止,然后将余数倒着排列。
下面以25为例,25的二进制即为11001
25÷2=12 余数1
12÷2=6 余数0
6÷2=3 余数0
3÷2=1 余数1
1÷2=0 余数1
对我们来说,我们经常需要做的是将2进制转为其他进制。
2进制转其他进制的方法叫“按权展开法”
有一个2进制:110100
2进制转8进制
将2进制每3个数分成一组。如下:
110
100
1*2^2+1*2^1+0*2^0
1*2^2+0*2^1+0*2^0
6
4
2进制转10进制
2进制转10进制有些许麻烦,2进制有多少个位。就要全部按权展开。
110100
1*2^5+1*2^4+0*2^3+1*2^2+0*2^1+0*2^0
将结果相加:52
2进制转16进制
2进制转16进制,每4个位为一组,不足的最前面补0。然后进行权展计算
字节很重要
*位(bit):二进制一个0或1就代表一个位。1010是4个位,1000 1010是8个位。
小知识:我们说的宽带100Mb中的b就是bit.
*字节(Byte):1字节 = 8个位。
字节是我们编程时经常要用到的概念,数据类型,内存管理都涉及到字节。一定要记清楚
小知识:硬盘2TB中的B指的就是Byte
字(word):字是由若干字节组成。一般一个字有4个字节。
原码、反码和补码
看了半天枯燥的内容了,再继续之前先来个美女调整一下大脑。
我们都知道计算机老外发明的,我们也都知道老外不会找零钱。找零钱的关键是什么?“减法”
由于老外不会找零钱,导致他们发明的计算机对减法运算也不在行。于是,聪明的老外就对计算机说:“不会减法可以,那咱们就来搞个加法吧”
于是53-53这个运算,就变成53+(-53)。
计算机又发愁了,那-53怎么表示呀?聪明的老外又想到新方法,并对计算机说:“你把这个数的二进制最前面那个位弄成符号位,0就是正的,1就是负的,这样-53就可以表示了”
计算机很开心的这样干了,这就是原码
53
0011 0101
-53
1011 0101
一串二进制码:
如果最高位是0,表示这个数是正数;
如果最高位是1,表示这个数是负数
计算机的噩梦并没有终止,因为它发现,53+(-53)结果依然不是0。于是它找到聪明的老外,并气呼呼的责问他:“你骗我,你说现在怎么办吧?”
老外不会找零钱,可是够聪明呀,于是他又对计算机说,那你把-53的二进制中,除了符号位,其他位置0变成1,1变成0。再试试
反码就这么被毫无责任的随便弄出来了。
-53原码
1011 0101
-53反码
1100 1010
正数的反码就是原码
负数的反码是除符号位之外,其他位取反。
天真的计算机对-53取反之后,发现又被骗了,这次它真的怒了!它杀到老外面前:“这次你不给我个说法,我今天就赖这儿了!!!”
聪明的老外,当然有他的办法,他对计算机说,你在反码的基础上+1试试。计算机吃过亏了,这次怒问:“你这方法靠谱么,不是随便胡弄我的吧?”
“绝对靠谱,不信你试试!”多么险恶的人呀,就这样把天真的计算机给哄回去了。
补码诞生了!
-53反码
1100 1010
-53补码
1100 1011
正数的补码就是原码
负数的补码是原码取反(变反码)之后,再加1
我们可爱的计算机,将53的二进制码和-53的补码进行计算,发现结果是正确的。
53
0011 0101
-53补码
1100 1011
结果
0000 0000
聪明的老外,看到天真的计算机开心的笑了,他知道成功了。然后他就跟计算机共同商定以下规则:
在计算机,都必须用补码进行运算。
正数的原码、反码和补码是一样。
负数的补码是原码取反之后,再加1得到的
不会找零的老外发明家和他的计算机的故事就此结束了。而他们的发明将会改变未来
领取专属 10元无门槛券
私享最新 技术干货