我是一名计划学生,我有一门名为" Informatic Mathematics "的课程。在练习中,它被要求将浮动数字从十进制,八进制,十六进制或二进制转换为另一个基数(不是必需到基数10),并且如果可能的话,在逗号(或点)之后保留12位数。
例如:
(
135.263
)b10 => B2
(100101001.11
)b2 => B10
(1011110010.0101
)b2 => B8
...
我知道如何转换数字。我转换小数部分(在点之后)的方法是将此部分除以目标基数的最大倍数,直到我得到0或直到我到达点后的第12位数。问题是我不知道2的所有否定倍数,所以通常我把它们写在一张单独的表格上,但通常我不必在点之后保留12位数并将这些倍数写成单独的工作表需要时间,在考试期间,时间是一件宝贵的事情,我不能浪费它来写这些倍数。
所以我想知道是否有更好的方法来进行这些转换,或者是否有人有任何提示。
此外,当我从非十进制数转换为另一个非十进制数时(例如:b2 => b8)我通常将第一个数转换为基数10,然后将基数10转换为目标基数。我想知道是否有办法将第一个数字直接转换为目标基数而不必先在基数10中进行转换。
顺便说一句:对不起,如果我的英语有点奇怪。我是法国加拿大人,我尽了最大努力,但如果你有什么不理解的地方,请告诉我。答案 0 :(得分:2)
我将从b2开始> B8。
001 011 110 010.010 100
如您所见,我已将数字分成3位数字段(2 ^ 3 = 8)。您必须在左侧和右侧添加额外的0以使其像这样。然后你逐位转换它。在这种情况下,您将收到1352.24
b2 => B10 这里有一些更难的数学。以这种方式标记您的号码中的数字:
1 0 0 1 0 1 0 0 1。 1 1
8 7 6 5 4 3 2 1 0 -1 -2
然后计算分数和整数 2 ^ 0 + 2 ^ 3 + 2 ^ 5 + 2 ^ 8 + 2 ^ -1 + 2 ^ -2
b10 => B2
将分数乘以2直到得到1.从每次乘法中取出整个部分。例: 0.25 * 2 = 0.5; 0.5 * 2 = 1; 因此,0.25是0.01;
UPD 对于否定转化,请查看第一和第二补码。