更快地进行进制转换

Posted virgildevil

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了更快地进行进制转换相关的知识,希望对你有一定的参考价值。

更快地进行进制转换

本文主要针对二进制,八进制,十进制,十六进制中的一些转换提供一些技巧和思路,以加快进制转换的手算及心算速度.

十进制转换成其他进制

这里我举一个37.625(十进制)转换为二进制的例子来说明计算方法

分成两个步骤

步骤1

打表,以1为基础,向左不断乘以2,向右不断除以2

得出32 16 8 4 2 1 0.5 0.25 0.125 的表

步骤2

根据步骤1打出的表,每次取表中最大的数来进行减法运算,如果能被最大的数减去(结果大于等于0即能被减去)那么就减去该最大数,然后不断循环,只到结果为0.

其全部过程由下图所示

技术图片

最后填上小数部分,可得结果为100101.101

这是二进制的,如果是十六进制的那么起打表为 256 16 1 1/16, 八进制的则为 64 8 1 1/8

打出的表可以根据需要调整长度,然后再根据步骤2进行运算即可.

这里可以类比推广到十进制转换成任意进制,不再赘述.

二进制转换为十六进制

再次以刚刚的数为例子100101.101 转换为十六进制

技术图片

二进制转换为八进制

其过程与前面的‘二进制转换为十六进制‘方法相同,只不过八进制是以3个二进制数为一组

总结

二进制中128 64 32 16 8 4 2 1的表需要牢记,就可以足够应付心算255之内的数

以上是关于更快地进行进制转换的主要内容,如果未能解决你的问题,请参考以下文章

在 C/C++ 中高效地在十六进制、二进制和十进制之间进行转换

如何递归地将十六进制转换为十进制[关闭]

十六进制与八进制之间转换的小技巧

是否有一种算法可以手动将十六进制的二进制补码转换为十进制?

Perl程序将二进制转换为ascii

在C中有效地将十六进制字符串转换为整数?