go - 为什么我在添加两个正 16 位整数后得到负整数?

标签 go

我是 golang 的新手,实际上,我是基于类型的编程的新手。我只懂 JS。

在学习 golang 教程中的简单示例时。我发现添加 a1 + a2 提供负整数值?

var a1 int16 = 127
var a2 int16 = 32767

var rr int16 = a1 + a2

fmt.Println(rr)

结果:

-32642

异常(exception):

  1. 编译器将在超过 int16 最大值时抛出错误。
  2. (或)GO 自动将 int16 转换为 int32。
  3. 32,894

你们能解释一下为什么显示 -32642 吗?

最佳答案

这是 Integer Overflow 的结果行为符合规范中的定义。

您没有看到预期的结果,因为

  1. 溢出发生在运行时,而不是编译时。
  2. Go 是静态类型的。
  3. 32,894 大于 int16 可表示的最大值。

关于go - 为什么我在添加两个正 16 位整数后得到负整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50190594/

相关文章:

go - os.Args 只读取在 golang 中运行文件时给出的一些数据

go - 退出后保持外部进程运行

转到 HTML 模板 : something similar to Jinja2 macros?

go - 即使在给定范围输入的世界状态中某些键不存在,getStateByRange 是否有效?

logging - 是否可以修改其他包中定义的类型的方法集?

go - 匿名函数的参数错误 - 不是类型

sql - 是否可以从 sql.Rows 获取 SQL 查询字符串?

inheritance - 如何在 Golang 中为多种类型编写一个函数?

go - 如何将动态 JSON 响应映射到 GO 结构?

go - 如何将gif分割成图片