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

Golang常量到底出了什么问题uint64

蒋招
2023-03-14
问题内容
userid := 12345
did := (userid & ^(0xFFFF << 48))

编译此代码时,我得到:

./xxxx.go:511: constant -18446462598732840961 overflows int

您知道这是怎么回事以及如何解决吗?谢谢。


问题答案:

^(0xFFFF << 48) 是一个无类型的常数,它是一个任意大的值。

0xffff << 480xffff000000000000。取反时,得到-0xffff000000000001(由于补码为-x = ^ x
+ 1或^ x =-(x + 1))。

当您编写时userid := 12345userid获取类型int。然后,当您尝试将&其与未类型化的常量-0xffff000000000001进行()编译时,编译器会认为此常量必须为int。在这一点上,编译器会抱怨,因为该值的大小太大而不能成为int

如果您尝试获取常量0x0000ffffffffffff,则可以使用1<<48 - 1,它将适合您(如果您具有64位整数)。由于如果您的代码int是32位,将永远无法工作,因此您应该int64在代码中使用而不是int使其可移植。

博客文章https://blog.golang.org/constants解释了常量的工作原理,以及为什么它们是常量的背景。



 类似资料:
  • 问题内容: 连接到MySQL数据库时,请执行以下步骤 实际上,我想知道语句的作用。 虽然此类不在mysql.jar中。它在哪里? 问题答案: 本类位于java.lang包,因此在分布用java,并自动导入到每个班级。 该方法所做的只是返回由类加载器加载的参数对象。然后,该方法返回该类的新实例。 因此,发生什么情况是您称之为 返回com.mysql.jdbc.Driver.class。然后,您调用该

  • 我有一个可搜索的术语数组,我想使用Lucene基本上CTRL-F通过这个文档堆栈,找到并存储所有这些术语在该文档堆栈中的位置。例如: 术语:“A”、“B”、“C” null 差不多吧。我怎么能这么做?到目前为止,我只是使用一个StandardAnalyzer,如下所示: Lucene最初会生成很多文档,但后来删除了除。cfs文件以外的所有文档。我如何保留其他文件来执行我的查询?

  • 问题内容: 我正在尝试将CS​​V插入临时表,但此SQL语句似乎不起作用。 出现以下错误…。 问题答案: 您不能将INSERT批量插入表变量中。所以这行: 是什么原因引起的错误。 仅供参考,最简单的解决方法可能只是使用#Temp表而不是Table Variable。因此,您的SQL代码将更改为:

  • 我搞不懂这本书是怎么学的。管道管道工作正常。 文件中有一些解释。例如,它们是什么意思: 具有最终估计器的变换管道。 为了让我的问题更清楚,什么是<代码>步骤?它们是如何工作的? 编辑 由于有了这些答案,我可以更清楚地回答我的问题: 当我调用管道并作为步骤传递两个变压器和一个估计器时,例如: 当我叫它时会发生什么? 我不知道估计器是如何成为变压器的,变压器是如何安装的。

  • 我试图在调试日志下面发出一个REST post调用。我尝试了不同的方法-信任许多不同风格的所有证书,将证书上载到java cacerts(JVM在加载时将证书显示为受信任的),但我仍然会变成failure_shake错误。下面的代码是否为您提供了有关问题的任何提示?使用Java8。

  • 我在这个URL上安装了一个应用程序:。servlet支持两种传递参数的方式——作为查询字符串和作为路径信息(例如和)。它的设计目的是对位于服务器上的引用XML文件应用默认转换,生成HTML文件,并将其发送回浏览器。有点不对劲,尽管servlet在这两种情况下都会生成html,但浏览器在第一个示例中将其呈现为html,在第二个示例中呈现为XML。此外,当我比较这两种情况下的HTTP响应(包括状态码、