目录
前言
二进制(BIN)
八进制(OCT)
十进制(DEC)
十六进制(HEX)
前言:
进制转换对于每个程序员来说是一个必不可少的知识,由于最近在看JAVA的源码,源码中部分运算都是直接对二进制数、十六进制数字进行直接运算。这对我这学渣来说简直就是噩梦,所以最近查了很多资料,打算对常用的进制转换进行一个总结。
二进制(BIN)
二进制(binary)在数学和数字电路中指以2为基数的记数系统,以2为基数代表系统是二进位制的。这一系统中,通常用两个不同的符号0(代表零)和1(代表一)来表示 。数字电子电路)中,逻辑门的实现直接应用了二进制,因此现代的计算机和依赖计算机的设备里都用到二进制。每个数字称为一个比特(Bit,Binary digit的缩写 。(摘自百度百科)
所谓二进制简单理解就是:由 0和1构成,每一位可以表达的最大数字就是1 ,每逢2就向前进一位数。
那么怎么进行十进制到二进制的转换呢?笼统的来说就是把十进制的数字以短除的形式进行计算,即除数(十进制)除以(进制数 二进制就除以二 八进制 十六进制同理)然后将所有的余数反向排列成为一串数字,这串数字就是被转换后的结果。(啥,你问我短除是啥!来上图)
把余数自下向上依次排列,9转换为二进制数字就为 1001
相对的 把二进制 转换为十进制的数字方法为:从二进制最右侧位的数字开始,拿到该位数字并乘以进制数(2)的该数字位的平方(注:从0开始也就是最右侧位数为0而不是1),再依次向左侧推进直到最左侧的一位 ,最后将每一位得到的值相加,就等到被转换后的十进制数字
以二进制 1001 为例
最右侧的数字为 1 该位运算的结果为 1 X 2的0次方(补充 任何除了0的数字的0次方都等于1,0的0次方没有意义;任何数字的1次方都等于本身。)依次计算出每位的结果。
1 X 2的0次方 = 1
0 X 2的1次方 = 0
0 X 2的2次方 = 0
1 X 2的3次方 = 8
二进制数1001转换为十进制数为 1 X 2的0次方 + 0 X 2的1次方 + 0 X 2的2次方 + 1 X 2的3次方 = 1 + 0 + 0 + 8 = 9
至此 一个二进制十进制的互相转换就完成了
八进制(OCT)
八进制,Octal,缩写OCT或O,一种以8为基数的计数法,采用0,1,2,3,4,5,6,7八个数字,逢八进1。一些编程语言中常常以数字0开始表明该数字是八进制。八进制的数和二进制数可以按位对应(八进制一位对应二进制三位),因此常应用在计算机语言中。(摘自百度百科)
八进制简单理解就是:由 0~7的数字组成,每一位最大可表示的数字为7,每逢8向前进一位。(注:为了防止八进制数字和十进制数字混淆,一般编程语言中的八进制的最左位会补0)
由十进制向八进制转换,同理与二进制。不同的地方在于除数变成了八进制的进制数 "8" (注:小于等于7大于等于0的数字转化的结果为十进制数字本身)
把余数自下向上依次排列,把9转换为八进制数为 "011"
由八进制向十进制进行转化与二进制转换为十进制同理。不同之处在于进制数变成了"8",计算方式为
1 X 8的0次方 = 1
1 X 8的1次方 = 8
0 X 8的2次方 = 0(注:实际运算中需要对补零位忽略不计,本身0 X 任何数都是0)
八进制数011转换为十进制为 1 X 8的0次方 + 1 X 8的1次方 + 0 X 8的2次方 = 1 + 8 + 0 = 9
十进制(DEC)(忽略)PS: 这个要是不会的话推荐直接重开
十六进制(HEX)
十六进制(简写为hex或下标16)在数学中是一种逢16进1的进位制。一般用数字0到9和字母A到F(或a~f)表示,其中:A~F表示10~15,这些称作十六进制数字。(摘自百度百科)
十六进制就比较有意思了它是由 数字0~9 字母 a~f (不区分大小写)组成 (PS:由于数字中没有大于 9 的单字 所以使用了字母 a~f 依次为 10 ~ 15 的数字)每逢16进一位数字。在一般的程序语言中多用0x为开头表示16进制的数字,
由十进制向十六进制转换,同理将除数变为"16"(注:小于等于9大于等于0的数字转化的结果为十进制数字本身,大于9小于等于15的部分依次为 a~f)
把余数自下向上排列得到十进制转化十六进制数字 0X354
十六进制转化为十进制与上同理,就不作详细的分析。公式为 4 X 16的0次方 + 5 X 16的1次方 + 3 X 16的2次方 = 4 + 80 + 768 = 852
至此,整篇文章结束。第一次在网络上发表自己的文章。如有不足还请在评论区中指出。