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

故意int溢出

丁晋
2023-03-14
问题内容

我正在使用哈希函数murmur2,该函数返回一个uint64

然后,我想将其存储在仅支持BIGINT(带符号的64位)的PostgreSQL中。

因为我对数字本身不感兴趣,但对二进制值(因为我将其用作检测唯一性的ID(我的值集为〜1000个值,一个64位的哈希值对我来说足够了)),我想int64通过“只是”更改类型将其转换为。

如何以一种使编译器满意的方式做到这一点?


问题答案:

您可以简单地使用类型转换:

i := uint64(0xffffffffffffffff)
i2 := int64(i)
fmt.Println(i, i2)

输出:

18446744073709551615 -1

转换uint64int64始终成功:它不会仅更改类型的内存表示。如果您尝试将无类型的整数常量值转换为int64:,可能会使您感到困惑。

i3 := int64(0xffffffffffffffff) // Compile time error!

这是一个编译时错误,因为常量0xffffffffffffffff(用任意精度表示)不适合,int64因为适合的最大值int640x7fffffffffffffff

constant 18446744073709551615 overflows int64


 类似资料:
  • 在我的C代码中,我有: 我确信最终结果不会导致整数溢出,但这并不能保证(a b) 以下是我的错误信息: 第20行:Char 27:运行时错误:有符号整数溢出:1063376696 2126753390不能在类型'int'(solution.cpp)中表示摘要:未定义行为清理器:未定义行为prog_joined.cpp:31: 27 我如何解决这类问题?

  • 问题内容: 对于以下值: 为什么会出现此错误? 消息248,级别16,状态1,过程USP_CRE_WEB_MEMBER_AUTOGENERATEDECV,行136 varchar值‘08041159620’的转换溢出了int列。 问题答案: 谢谢拉维和其他用户....尽管如此,我已经找到了解决方案 只需输入“ 0”而不是0

  • 在C中,是否可以在不造成整数溢出的情况下执行以下操作?我的答案需要是一个整数,稍后在程序中使用。代码打印为-337。正确答案应该是2014。

  • 问题内容: 我正在使用Spring将JMS连接工厂注入到我的Java应用程序中。由于仅在生产环境中才需要该工厂,但是在开发过程中却不需要,因此我将Bean定义放入单独的XML中,并将其包含在主applicationContext.xml中。在生产环境中,此额外文件包含常规bean定义。在我的本地开发环境中,我希望此bean为null。当Spring遇到一个未知的引用ID时,试图完全完全删除Bean

  • 我需要设置/添加照片/电影作为ToDo应用程序的附件。不幸的是:onActivityResult in line super。onActivityResult(请求代码、结果代码、数据);以红色突出显示,我得到一个错误: 无法解析方法“onActivityResult(int,int,android.content.Intent)” ctivity.java

  • 假设我有一个这样的数组: 我故意用从负值到高于9的任何值对它进行索引,但不使用任何方式产生的值。这是出于性能原因(也许在数组访问完成后检查输入索引更有效)。 我的问题是: 这样做安全吗,或者我会遇到某种内存保护障碍,有可能破坏内存或某些索引的类似功能吗