计算机中常用的2进制,8进制,16进制其实是同一种数字的不同表达,在图像处理中要经常用到他们之间的转换。他们之间到底有什么关系呢,在做java图形界面的过程中偶尔有一点感悟,与大家共同分享。
首先看他们各自的定义:
2进制:Binary,是计算机内部可识别的唯一数制,以2为基数的计数法,采用0,1两个数字
8进制:Octal,缩写OCT或O,一种以8为基数的计数法,采用0,1,2,3,4,5,6,7八个数字,
16进制:Hexadecimal,一种以16为基数的计数法,采用0-9,10个数字和a-f 6个字母(不区分大小写)
看几个例子:
十六进制 八进制 二进制 十进制
ff 377 11111111(8个1) 255
7 7 111(3个1) 7
fff 7777 111111111111(12个1) 4095
3f 77 111111(6个1) 63
这里可以总结一下规律:
①十六进制中每1位代表二进制中的4位,八进制中的每1位代表二进制中的3位
②不论十六进制还是八进制在最大值下,每多一位转换为二进制时都会根据①的原则多相应位数个1
③十六进制和八进制转换为二进制都可以安位转,即将每一位数转换为相应的二进制数就是最后对应的结果
除此之外,这些数字在不同的进制之间其实有共同的意义
比如四位二进制数可以表示最多16可能性(这里每一种数值我们称为一种可能性),而一位十六进制数也能表示最多十六种可能性,四位二进制数种最大的数1111对应十六进制中的f,利用这种假设可以很好的将其相互转换
例如(这里结果都是十进制的形式)
十六进制 f5代表的可能性为:15 * 16 + 5 =245
十六进制85代表的可能性为:8 * 16 + 5 =133
八进制74代表的可能性为:7 * 8 + 4 = 60
以上是个人的理解,当然他们之间有更通用的数学转换公式,百科上有很详尽的讲解