当前位置: 首页 > 面试题库 >

紧凑地写入10的幂作为常数

施念
2023-03-14
问题内容

我正在阅读最近发布的The Go Programming
Language
,到目前为止,这是一件令人高兴的事情(Brian
Kernighan是其中的一位作者,无论如何我都不会期待别的什么)。

我在第3章遇到了以下练习:

练习3.13const尽可能紧凑地通过YB 编写KB,MB的声明。

:在此上下文中,KB,MB等表示1000的幂)

在此之前有一节,其中iota介绍了一种有用的常量生成器机制。特别是,上一段展示了一种很好而紧凑的方式来将1024的幂定义为常量:

const (
    _ = 1 << (10 * iota)
    KiB
    MiB
    GiB
    TiB
    PiB
    EiB
    ZiB
    YiB
)

作者进一步提到了10的幂:

iota机制有其局限性。例如,由于没有幂运算符,因此无法生成更熟悉的1000(KB,MB等)的幂。

我正在为此练习而苦苦挣扎,因为与简单地手动拼出1000的幂相比,预期的解决方案似乎更加复杂(特别是因为它iota是在引入之后出现的)。我觉得有一些巧妙的方法可以将这种iota方法巧妙地与其他方法结合使用。

我考虑过要找到一种系统的方法来从1024的每个幂中减去“多余”的数量,以获得1000的幂,但是这使我无处可去。然后,我查看了二进制表示形式,以尝试推断出iota可能有用的通用模式,但同样,我一无所获。

如果iota没有指数运算符,我真的看不到如何从单个增量值()中产生1000 的幂。

有任何想法吗?


问题答案:

我会说,这是不可能的,因为你想要的是代表一个功能10^(3i),其中i是一个正整数,如一些功能f(i),其中f是你小学去功能的集成功能(+,
- ,/,*)。

可能2^(10i)仅是因为go引入了另一个基本函数整数幂。因此,如果1 << y允许y浮动,则可以修改代码以使用1 << (log2(10) * 3 * i)。之所以可行,是因为这等同于解决10^(3i) = 2^y。取双方的log2 y = log2(10) * 3 * i

但可悲的是,足够的按位移位是整数运算。



 类似资料:
  • 可能重复: 替换python中的switch语句? 假设我在Python中有一个列表: 列表=('ADD'、'SUB'、'PUSH'、'POP') 我想根据输入运行一个函数,该输入可以是列表中的任何值。 没有为中的每个元素编写一个开关用例语句,有没有更紧凑的编写方法? 我的理由是,该名单今后会不断增加。

  • 在解析文件时,我会遍历文件的列标题,看看其中一个是否等于(忽略大小写)compare和: 使用字符集读取该文件: 观察调试器会发现值是非紧凑字符串(UTF-16),而值是紧凑字符串(ASCII): 这是默认行为还是bug?如何使的计算结果为?

  • 问题内容: 我有一个表,其数据对的建模如下: 然后总是更大。这些对表示要进行的替换。因此,将100替换为50,然后将50替换为40,然后将其替换为10。 因此结果将是这样的: 有没有一种我可以更改或加入此表来表示的简洁方法? 我知道我可以自己加入类似于以下内容的内容: 但是,这需要多次通过,因此,为什么我问是否有更好的方法来完成它? 问题答案: 结果:

  • 问题内容: 我正在寻找一种在Java 1.8中创建紧凑配置文件的方法。是否可以创建紧凑配置文件,因为这是说它仅适用于嵌入式版本 问题答案: 简短答案 JEP 161指出配置文件必须使用Java 8。要创建它们,请使用 应答器稍长 您怀疑配置文件可能仅存在于嵌入式平台上,并且@skiwi的评论使我有些困惑,因此我决定自己检查一下。 OpenJDK示例 为了检查配置文件是否存在,我使用了OpenJDK

  • 我试图通过GridBagLayout实现以下目标: 框架将接收一组“字段”(JLabel,JTextField对),我想以“网格状”的方式排列它们,其中一行将包含两个这样的对(JLabel1 JField1 JLabel2 JField2)。当一行包含这四个组件时,下一个组件将添加到另一行。 编辑:我希望组件从面板顶部开始 我的代码生成以下布局。我希望组件的布局更紧凑(尤其是垂直距离) 下面是代码

  • 我尝试创建一个使用压缩和删除的Kafka主题配置,以实现以下目标: 在保留期限内,保留密钥的最新版本 在保留期之后,要删除的任何早于时间戳的消息 当我在测试中将其设置为较小的量时,例如20mins、1hr等,我可以正确地看到数据在保留期后被修剪,只需调整主题上的。 我可以看到数据正按照预期的那样被正确压缩,但是如果我从一开始就阅读主题,那么在10天的保留期之后,比10天早得多的数据仍然存在。这么长