|
|
1
1
十进制转换有点慢,但实际上并不复杂。让我们看一下十六进制转换,更像我们可能会用真正的代码编写它。例如,在C++中,你可能会进行这样的转换:
然而,现在,它有一些神奇的数字。让我们摆脱它们:
在消除这些幻数的过程中,我们还使该例程几乎是通用的——如果我们更改“base”的值,则该例程的其余部分仍然有效,并将输入转换为指定的基数。本质上,我们需要做的另一个改变是,如果我们想支持大于16的基数,就增加更多的“数字”数组。 为了简单起见,这也忽略了一些事情。最明显的是,如果数字为负数,则通常设置一个标志,转换为正数,如果设置了标志,则在结尾处在字符串中放置一个“-”。对于2的补码,最大负数有一个角大小写,它不能转换为正数(如果不转换为更大范围的类型)。通常你通过推广大多数类型来解决这个问题。对于最大的整数类型(不能升级),通常只需硬编码一个值就可以了。 原则上,浮点数并没有完全不同——基本上你还是要做数学运算,一次生成一个数字。事实上,它变得更复杂仅仅是因为您通常需要处理两种不同的格式(至少是“基本”浮点和某种“科学”格式),以及用于字段宽度和精度的变量。当你处理完这个问题时,你最终得到了几百行左右的代码——这并不是一个特别惊人的数量,但可能比这里包含的代码更合理一些。 |
|
|
2
1
出于性能原因,从一种表示转换到另一种表示(特别是浮点/整数转换)通常是一种低级CPU指令,并在处理器级别实现。这就是为什么您通常看不到它在库或语言级别上被重新实现的原因。 这在信号处理世界中尤其常见,例如,您希望获取波形并将其转换为某个范围内的离散整数值。 |
|
|
3
0
对于整数,您可以找到除法余数,这是最后一个数字,除以10,找到模余数-这是最后一个数字,依此类推。 浮点数由两部分组成-有效数字和指数,即 数字=有效。数字*(基数^指数),其中基数可以是10、2或其他数字。 |
|
|
David542 · 任何语言都允许函数名中有空格吗? 1 年前 |
|
Andy · 将LENGTH OF移动到COMP字段解析失败 1 年前 |
|
|
Chris Geo · 如何找到LR0项目的FOLLOW集合? 1 年前 |
|
|
Yash Singhal · 在reactjs中解析Pdf中的文本 1 年前 |
|
|
i33SoDA · 如何将逗号分隔的数字字符串解析为int数组? 1 年前 |