bug*_*net 3 algorithm floating-point decimal-point radix-point radix
鉴于维基百科关于Radix Point的文章,如何计算二进制当量为10.1或十六进制当量为17.17?对于前者,十分之一的二进制当量是多少?对于后者,十六进制表示为17/100?
我正在寻找一种算法,而不仅仅是那两个例子的解决方案.
要将十进制10.1转换为二进制,请分隔整数和小数部分并分别转换每个部分.
要转换整数部分,请使用重复整数除以2,然后按相反顺序写入余数:
10/2 = 5余数0
5/2 = 2余数1
2/2 = 1余数0
1/2 = 0余数1
答案:1010
要转换小数部分,请使用重复乘以2,在每一步减去整数部分.生成顺序的整数部分代表您的二进制数:
0.1*2 = 0.2
0.2*2 = 0.4
0.4*2 = 0.8
0.8*2 = 1.6
0.6*2 = 1.2
0.2*2 = 0.4
0.4*2 = 0.8
......(循环永远重复)
所以十进制0.1是二进制0.000110011001100 ...
(有关更详细的说明,请参阅我的文章http://www.exploringbinary.com/base-conversion-in-php-using-bcmath/中的例程dec2bin_i()和dec2bin_f().
对于十六进制,使用相同的过程,除非除数/乘数为16而不是2.余数和大于9的整数部分必须直接转换为十六进制数字:10变为A,11变为B,...,15变为F .