登录
首页 >  Golang >  Go问答

将 10 的幂写成常数

来源:Golang技术栈

时间:2023-04-09 16:23:25 234浏览 收藏

怎么入门Golang编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《将 10 的幂写成常数》,涉及到golang,有需要的可以收藏一下

问题内容

我正在阅读最近发布的 The Go Programming Language,到目前为止一直很开心(Brian Kernighan 是其中的作者之一,无论如何,除了卓越之外,我别无所求)。

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

练习 3.13const尽可能紧凑地 编写KB、MB 到 YB 的声明。

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

前面有一节iota介绍了一个有用的常量生成器机制;特别是,上一段展示了一种将 1024 的幂定义为常量的简洁的方式:

const (
    _ = 1 

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

iota机制有其局限性。例如,不可能生成更熟悉的 1000(KB、MB 等)的幂,因为没有求幂运算符。

我在这个练习中苦苦挣扎,因为看起来预期的解决方案比简单地手工拼出 1000 的幂要复杂一些(特别是因为它出现在iota引入之后)。我觉得有一些聪明的方法可以做到这一点,它iota以一种微妙的方式与其他东西结合使用。

我想过找到一种系统的方法,从 1024 的每个幂中减去“多余”的数量,以获得 1000 的幂,但这让我一事无成。然后我查看了二进制表示,试图推断出一个iota可能有用的一般模式,但同样,我什么也没得到。

如果没有幂运算符,我真的看不出如何从单个递增值 ( iota) 中生成 1000 的幂。

有任何想法吗?

正确答案

我会说这是不可能的,因为您想要将一个函数表示为某个函数,10^(3i)其中i是一个正整数,其中是您的基本 go 函数(+、-、/、*)的合成函数。f(i)``f

之所以可能,2^(10i)只是因为 Go 引入了另一个基本函数整数幂运算。因此,如果1 允许 y 浮动,您将能够修改代码以使用1 . 这会起作用,因为这相当于解决10^(3i) = 2^y. 取双方的log2 `y = log2(10) * 3

  • i`。

但可悲的是,按位移位是一个整数运算。

本篇关于《将 10 的幂写成常数》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表