MST

星途 面试题库

面试题:Go中不同整型的取值范围及转换注意事项

请阐述Go语言中int8、int16、int32、int64以及uint等整型的取值范围。并说明在进行不同整型之间相互转换时,需要注意哪些问题?
30.8万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  • int8:取值范围为 -128 到 127。因为它是 8 位有符号整数,最高位为符号位,所以表示范围是 $-2^{7}$ 到 $2^{7}-1$。
  • int16:取值范围为 -32768 到 32767。16 位有符号整数,范围是 $-2^{15}$ 到 $2^{15}-1$。
  • int32:取值范围为 -2147483648 到 2147483647。32 位有符号整数,范围是 $-2^{31}$ 到 $2^{31}-1$。
  • int64:取值范围为 -9223372036854775808 到 9223372036854775807。64 位有符号整数,范围是 $-2^{63}$ 到 $2^{63}-1$。
  • uint:无符号整型,在 32 位系统上取值范围是 0 到 4294967295($2^{32}-1$),在 64 位系统上取值范围是 0 到 18446744073709551615($2^{64}-1$)。

不同整型之间相互转换注意问题

  • 溢出问题:当把一个较大范围的整型值转换为较小范围的整型时,如果值超出了目标类型的取值范围,会发生截断,导致数据丢失。例如将一个 int32 类型值 200 转换为 int8,由于 int8 最大为 127,就会截断数据,得到的结果可能是不正确的。
  • 符号问题:有符号整型和无符号整型相互转换时,符号位的解释会发生变化。例如 int8 类型的 -1 转换为 uint8 时,会按照二进制补码形式转换,结果为 255。从无符号转有符号时,如果值大于有符号类型的最大值,转换后的值也会是错误的。
  • 显式转换:Go 语言中不同整型之间转换需要显式进行,如 var a int32 = 100; var b int8 = int8(a)。在进行这种转换时,一定要确保转换前后的值在合理范围内,以避免数据错误。