【发布时间】:2014-06-13 11:41:37
【问题描述】:
你如何用二进制表示(十进制)整数 50? 必须“翻转”多少位才能将 ASC11 中表示的小写“a”大写? 你如何表示(十进制)整数 50,哦,“十六进制”,也称为 base-16?回想一下,十进制只是以 10 为底,而二进制只是以 2 为底。从那些基础系统推断如何表示这个? 请帮我回答这些问题。帮助。
【问题讨论】:
你如何用二进制表示(十进制)整数 50? 必须“翻转”多少位才能将 ASC11 中表示的小写“a”大写? 你如何表示(十进制)整数 50,哦,“十六进制”,也称为 base-16?回想一下,十进制只是以 10 为底,而二进制只是以 2 为底。从那些基础系统推断如何表示这个? 请帮我回答这些问题。帮助。
【问题讨论】:
为了帮助你:
二进制仅由 1 和 0 组成。
这可能有助于您理解二进制转换
十进制是0-9
十六进制是 0-9,然后是 A-F(所以 A 代表 10,B 代表 11,依此类推,直到 F 代表 15)
【讨论】:
这里有一些关于转换为二进制的提示:
50 mod 2? 25 mod 2 然后12 mod 2 呢?如果你继续这样做,你会得到什么结果?mod 2(总是)返回什么结果? - 1 或 0
测试用例 50:
50 mod 2 = 0 - 6th digit
25 mod 2 = 1 - 5th digit
12 mod 2 = 0 - 4th digit
6 mod 2 = 0 - 3rd digit
3 mod 2 = 1 - 2nd digit
1 mod 2 = 1 - 1st digit
除法连接和反转的余数是:110010,即二进制的50。
这也可以转化为更多的基础吗? - 是的,正如我们在尝试将50 转换为十六进制时看到的那样:
50 mod 16 = 2 - 2nd digit
3 mod 16 = 3 - 1st digit
再次连接和反转的余数是32,方便的是十六进制的50。
一般来说,我们可以说要将数字转换为任意基数,您必须将数字的余数和基数相除,然后将数字除以基数并再次执行相同的操作。在程序中,这看起来像:
while the number is greater 0 do:
result = (number mod base) + result;
number = number div base;
如何将任意基数的数字转换为以 10 为基数的数字?首先让我们用二进制做一个测试用例。让我们使用上一个示例中的50:110010
从二进制转换的方法是将每个数字乘以基数乘以它在数字中的位置的幂,然后将结果相加。位置的枚举以0 的最低有效数字开始。我们之前的数字看起来像这样:
1 *2^5 + 1 *2^4 + 0 *2^3 + 0 *2^2 + 1 *2^1 + 0 *2^0
简化为:
32 + 16 + 2 = 50
它也适用于任何其他基础,例如前面示例中的 32:
3 *16^1 + 2*16^0 = 48 + 2 = 50
在程序中,这看起来像这样:
from end of number to beginning do:
result = result + digit * (base ^ position)
【讨论】: