当前位置: 首页 > 知识库问答 >
问题:

围棋中int和int64有什么区别?

缑泓
2023-03-14

我有一个包含整数的字符串(已从文件中读取)。

我正在尝试使用 strconv 将字符串转换为 int。ParseInt().ParseInt 要求我提供一个位大小(位大小 0、8、16、32 和 64 对应于 int、int8、int16、int32 和 int64)。

从文件中读取的整数很小(即它应该适合普通的int)。但是,如果我传递位大小为0,我会得到类型为int64的结果(大概是因为我在64位操作系统上运行)。

为什么会发生这种情况?我如何得到一个正常的int?(如果有人对何时以及为什么我应该使用不同的int类型有一个快速的入门,那就太棒了!)

编辑:我可以使用int([i64_var])将int64转换为普通int。但我仍然不明白为什么 ParseInt() 在我请求 0 位大小时给我一个 int64。

共有3个答案

寿和通
2023-03-14

<代码>strconv。ParseInt和朋友返回64位版本,以保持API的干净和简单。否则,必须为每个可能的返回类型创建单独的版本。或者返回<code>接口{}</code>,然后必须经过类型断言。这些都不是理想的。

选择 int64,因为它可以容纳任何整数大小,最多可以容纳支持的 64 位,包括支持的 64 位。传递到函数中的位大小可确保将值正确钳位到正确的范围内。因此,您可以简单地对返回值进行类型转换,将其转换为所需的任何整数类型。

至于intint64int只是32位或64位整数的别名,具体取决于编译的体系结构。

对于挑剔的眼睛:返回值是一个有符号整数。有一个单独的strconv。用于无符号整数的 ParseUint 函数,它返回 uint64 并遵循与上面解释的相同的推理。

丘华翰
2023-03-14

包strconv

函数分析int

func ParseInt(s string, base int, bitSize int) (i int64, err error)

ParseInt解释给定基数(2到36)的字符串s,并返回相应的值I。如果base == 0,则该基数由字符串的前缀表示:base 16表示“0x”,base 8表示“0”,否则base 10。

bitSize 参数指定结果必须适合的整数类型。位大小 0、8、16、32 和 64 对应于 int、int8、int16、int32 和 int64。

ParseInt 返回的错误具有具体类型 *NumError 并包含 err。数字 = s。如果 s 为空或包含无效数字,则 err。Err = 错误语法;如果对应于 S 的值不能用给定大小的有符号整数表示,则 err。Err = ErrRange。

ParseInt 始终返回一个 int64 值。根据 bitSize,此值将适合 intint8int16int32int64。如果该值不能用 bitSize 给出的大小的有符号整数表示,则 err。Err = ErrRange

Go 编程语言规范

数字类型

n位整数的值为n位宽,并使用2的补码算术表示。

int8        the set of all signed  8-bit integers (-128 to 127)
int16       the set of all signed 16-bit integers (-32768 to 32767)
int32       the set of all signed 32-bit integers (-2147483648 to 2147483647)
int64       the set of all signed 64-bit integers (-9223372036854775808 to 9223372036854775807)

还有一组预声明的数值类型,具有特定于实现的大小:

uint     either 32 or 64 bits
int      same size as uint

int 为 32 位或 64 位,具体取决于实现。通常 32 位编译器为 32 位,64 位编译器为 64 位。

要查找<code>int</code>或<code>uint</code>的大小,请使用<code>strconv.IntSize</code>。

包strconv

常数

const IntSize = intSize

IntSizeintuint 值的大小(以位为单位)。

举个例子,

package main

import (
    "fmt"
    "runtime"
    "strconv"
)

func main() {
    fmt.Println(runtime.Compiler, runtime.GOARCH, runtime.GOOS)
    fmt.Println(strconv.IntSize)
}

输出:

gc amd64 linux
64
戎洛华
2023-03-14
func ParseInt(s string, base int, bitSize int) (i int64, err error)

ParseInt始终返回int64

< code>bitSize定义值的范围。

如果对应于 s 的值不能用给定大小的有符号整数表示,则 err。Err = ErrRange。

http://golang.org/pkg/strconv/#ParseInt

type int int

int 是大小至少为 32 位的有符号整数类型。但是,它是一种不同的类型,而不是 int32 的别名。

http://golang.org/pkg/builtin/#int

因此int将来可能大于32位,或者在C中的int等某些系统上。

我想在某些系统上,int64可能比int32更快,因为该系统只能处理64位整数。

下面是 bitSize 为 8 时的错误示例:

http://play.golang.org/p/_osjMqL6Nj

package main

import (
    "fmt"
    "strconv"
)

func main() {
    i, err := strconv.ParseInt("123456", 10, 8)
    fmt.Println(i, err)
}
 类似资料:
  • 本文向大家介绍int和Integer有什么区别?相关面试题,主要包含被问及int和Integer有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 考察点:数据类型 Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是I

  • 问题内容: 例如,为什么可以这样做: 但不是: 你可以执行以下操作: 但不是: 问题答案: 是原始类型。类型的变量int存储要表示的整数的实际二进制值。没有意义,因为int它不是类,因此没有任何方法。 是一个类,与Java语言中的其他类没有什么不同。类型变量存储对对象的引用,就像存储任何其他引用(对象)类型一样。是对类的静态方法的调用(请注意,此方法实际上返回而不是)。 更具体地说,是一个具有单个

  • 问题内容: 在你可以存储,,但它是从不同的。它们存在的原因是什么,如何使用它们? 问题答案: 根据Swift文档 整数 在大多数情况下,您无需选择特定大小的整数即可在代码中使用。Swift提供了另一个整数类型Int,其大小与当前平台的本机字大小相同: 在32位平台上,Int与Int32的大小相同。 在64位平台上,Int与Int64相同。 除非您需要使用特定大小的整数,否则在代码中始终将Int用作

  • VSCode 对两个类 self.save_data.prop 的类型推断结果: int* | str* 和 int | str 有什么区别,多出来的星号是什么意思?

  • 问题内容: 当我遇到Joel Spolsky的时候,我正在阅读《更多关于软件的 Joel》,他说了一种有关特定类型的程序员的一些知识,他们知道Java / C#(面向对象编程语言)中an int和an 之间的区别Integer。 那么区别是什么呢? 问题答案: 在Java中, “ int”类型是原始类型,而“ Integer”类型是对象。 在C#中, 类型与值类型相同,并且是值类型(即更像Java

  • 问题内容: 考虑以下基础: 任何人只能活在堆里 阵列IS-A 和 IS-A 我发现自己很难回答这样一个简单的问题: JVM和 JVM内部 有什么区别吗?还是仅在“编译时”才有意义? 问题答案: 运行时有所不同。 是原始int值的数组。是一个“对象”数组,其中包含对Integer对象的引用。 最重要的实际差异:无法持有价值观。 但是我仍然很困惑:是否仅存储原始值?如果是这样,这是否意味着原始类型可以