先说句实在话,很多朋友一看到“十进制转换成十六进制”这几个字,第一反应就是:“这肯定是程序员才学的东西,和我没关系。”但真不是,你平时挑手机颜色、修图调色、看文件大小、折腾路由器,甚至给智能灯泡设置颜色,背后都可能藏着十六进制的影子,它没有想象中那么高深,说白了,就是换一种方式记数字。
我是做自媒体内容的,平时写稿、修图、排版、看后台数据,一开始也觉得进制转换离生活很远,后来自己折腾智能家居、改网页颜色,才发现十六进制特别像生活里的“暗号”:懂的人一眼就明白,不懂的人会觉得像天书,今天我们就用最接地气的方式,把“十进制转换成十六进制”这件事聊清楚。
先弄明白一个基础概念:十进制是“逢十进一”,数字用0到9表示;十六进制是“逢十六进一”,但问题是,阿拉伯数字只有0到9这十个符号,后面六个怎么办?于是就用字母补上:A代表10,B代表11,C代表12,D代表13,E代表14,F代表15,也就是说,十六进制里的一位,可以表示0到15这十六种状态。
那十进制怎么转换成十六进制?最常用、也最适合手算的方法叫“除以16取余,倒着读”,别被这句话吓到,操作起来其实很朴素,举个例子,把十进制255转换成十六进制:
255 ÷ 16 = 15,余15,15在十六进制里是F。
15 ÷ 16 = 0,余15,也就是F。
然后把余数从下往上读,得到FF。
十进制的255,就是十六进制的FF,是不是没那么神秘?
再来一个稍微复杂点的:把2024转换成十六进制。
2024 ÷ 16 = 126,余8;
126 ÷ 16 = 7,余14,14就是E;
7 ÷ 16 = 0,余7。
从下往上读,结果是7E8,也就是说,十进制2024对应十六进制7E8,你可以用计算器验证一下,这个过程不靠死记硬背,靠的是理解“每除一次,就是在拆一个16的位”。
生活里最典型的例子,就是颜色代码,比如你在修图软件里看到颜色值#FF6B35,这其实很可能就是RGB三个通道的十进制数值转换成了十六进制,假设某个橙色是RGB(255,107,53),我们把255转换成十六进制,得到FF;107怎么转?107 ÷ 16 = 6,余11,而11是B,所以是6B;53 ÷ 16 = 3,余5,所以是35,合在一起就是#FF6B35,你看,设计师嘴里的“红色拉满、绿色107、蓝色53”,到了代码和网页里,就变成了#FF6B35,这不是炫技,是不同工具之间的共同语言。
再比如玩单片机、Arduino或者智能硬件的人,常会看到传感器读数,某个传感器返回十进制1023,串口工具用十六进制显示时可能是3FF,算一下:1023 ÷ 16 = 63,余15,也就是F;63 ÷ 16 = 3,余15,还是F;3 ÷ 16 = 0,余3,从下往上就是3FF,看着像代码,其实只是同一个数的另一种“写法”。
还有文件大小和内存地址,比如4096这个数,十进制看着普通,转成十六进制就是1000,很多搞计算机的人喜欢用十六进制看地址、看寄存器,不是因为他们喜欢复杂,而是因为十六进制和二进制之间的对应关系更整齐:一位十六进制正好对应四位二进制,二进制是母语;十六进制是更短、更顺眼的笔记。
手算时也有几个小坑,第一,余数10到15千万别写成数字10、11、12,要写成A到F,第二,余数要从下往上读,不是从上往下,第三,遇到不足一位的情况要注意补零,尤其在颜色代码、地址表达里,格式统一很重要,第四,算完最好用工具验算一下,不丢人,反而踏实。
我个人觉得,学习“十进制转换成十六进制”,最重要的不是背公式,而是建立一种“数字可以换衣服”的意识,同一个数值,用十进制写、用十六进制写、用二进制写,本质没有变,只是表达场景不同,就像同一个人,在家穿睡衣,上班穿衬衫,参加婚礼穿西装,你不能说换了衣服就换了个人,十六进制就是数字在计算机世界里的一套“工作服”。
我也不太赞成那种一上来就让人死记“除16取余”的教法,方法当然要会,但更重要的是拿生活例子去练,调一次颜色,算一次#FF6B35;看一次传感器读数,算一次1023;遇到4096,知道它写成1000,这样学,才不会今天记住、明天忘光,工具确实方便,手机计算器一按就出来,但我始终认为,懂原理的人在使用工具时更不容易被坑,也更能看懂工具背后的逻辑。
别再把“十进制转换成十六进制”当成冷冰冰的考试题,它更像是一座小桥,一头连着人的日常表达,一头连着计算机的工作方式,你未必天天手算,但只要你调过颜色、看过设备参数、用过开发工具,它就已经悄悄出现在你生活里了,学会它,不是为了炫耀,而是为了在需要的时候,能看懂那个“F”和“A”到底在说什么。
