1
1
十进制转换有点慢,但实际上并不复杂。让我们看一下十六进制转换,更像我们可能会用真正的代码编写它。例如,在C++中,你可能会进行这样的转换:
然而,现在,它有一些神奇的数字。让我们摆脱它们:
在消除这些幻数的过程中,我们还使该例程几乎是通用的——如果我们更改“base”的值,则该例程的其余部分仍然有效,并将输入转换为指定的基数。本质上,我们需要做的另一个改变是,如果我们想支持大于16的基数,就增加更多的“数字”数组。 为了简单起见,这也忽略了一些事情。最明显的是,如果数字为负数,则通常设置一个标志,转换为正数,如果设置了标志,则在结尾处在字符串中放置一个“-”。对于2的补码,最大负数有一个角大小写,它不能转换为正数(如果不转换为更大范围的类型)。通常你通过推广大多数类型来解决这个问题。对于最大的整数类型(不能升级),通常只需硬编码一个值就可以了。 原则上,浮点数并没有完全不同——基本上你还是要做数学运算,一次生成一个数字。事实上,它变得更复杂仅仅是因为您通常需要处理两种不同的格式(至少是“基本”浮点和某种“科学”格式),以及用于字段宽度和精度的变量。当你处理完这个问题时,你最终得到了几百行左右的代码——这并不是一个特别惊人的数量,但可能比这里包含的代码更合理一些。 |
2
1
出于性能原因,从一种表示转换到另一种表示(特别是浮点/整数转换)通常是一种低级CPU指令,并在处理器级别实现。这就是为什么您通常看不到它在库或语言级别上被重新实现的原因。 这在信号处理世界中尤其常见,例如,您希望获取波形并将其转换为某个范围内的离散整数值。 |
3
0
对于整数,您可以找到除法余数,这是最后一个数字,除以10,找到模余数-这是最后一个数字,依此类推。 浮点数由两部分组成-有效数字和指数,即 数字=有效。数字*(基数^指数),其中基数可以是10、2或其他数字。 |
John V · 是否存在单元测试无法发现的逻辑/流错误类型? 6 年前 |
Beefster · 为什么ANSI颜色转义以“m”而不是“]”结尾? 6 年前 |
Guillermo Gutiérrez · STR转换是如何工作的? 7 年前 |
RudziankoÅ · 合并排序数组算法 7 年前 |
user8852560 · 构造函数中的验证和构造函数冲突 7 年前 |
jav974 · 订购产品时寻找最佳价格组合的算法 7 年前 |
hippietrail · 确定浮点数中前导零的数量 7 年前 |