进制转换
好久都没有好好整理过进制之间转换的关系了。最近在研究 RPC 的内容,有一些理论知识必须要重新整理一下。
由于数据在计算机中的表示,最终以二进制的形式存在,所以有时候使用二进制,可以更直观地解决问题。
但是有一些时候,二进制表示的数据实在的太长了,所以我们可能需要一些更高进制的数来表示数据,而我们从小学习的数学,就是以 10 进制来代表的。
进制数越大,所需要数长度就越短。
我们常用的进制有 2、8、16 进制,分别是 2 的 1 一次方,2 的 3 次方,2 的 4 次方。(至于为什么没有 3 进制,4 进制诸如此类的,各位百度一下吧)
进制规则如下:
2 进制,用两个阿拉伯数字:0、1;
8 进制,用八个阿拉伯数字:0、1、2、3、4、5、6、7;
10 进制,用十个阿拉伯数字:0 到 9;
16 进制,用十六个阿拉伯数字……等等,阿拉伯人或说是印度人,只发明了 10 个数字啊?
16 进制就是逢 16 进 1,但我们只有 0~9 这十个数字,所以我们用 A,B,C,D,E,F 这六个字母来分别表示 10,11,12,13,14,15。字母不区分大小写。
十进制转二进制
如果我有一个数字 3,想要转成 2 进制。但是只有 0、1 两个数字,如何表示 3 的呢。所以,这个时候就需要逢二进一,从 2 开始计算。2 的进制是 10,3/2=1,所以就是 11,4 的进制呢,同理:4/2 = 2。所以就从 10 变成了 100。所以是 3 变成 4 的话,就是低位+1.进一位变成 100.
二进制转八进制(从低位起算,每三位二进制数代表一位 8 进制位)
有人会问,为什么每三位二进制代表一个 8 进制位呢,那是因为 2 的三次方是 8 的关系。所以二进制的每 3 位,都要代表 8 进制的进一位。
例如我有(十进制:10)00001010,要转成 8 进制就是 012。
二进制转十六进制(同理转八进制可得,每 4 位二进制数代表一个十六进制位)
例如我有(十进制:10)00001010,要转成 16 进制就是 0xA。
涉及 PHP
在 PHP 当中,需要表示八进制的时候,需要用 0
开头的整数,输出出来的数据会被解析转成十进制的数据。而表示十六进制的时候,需要用到的是 0x
开头
十进制转二进制
=>decbin($decVar)
十进制转十六进制
=>dechex($decVar)
十六进制转十进制
=>hexdec($hexVar)
二进制转十进制
=>bindec($binVar)