为了账号安全,请及时绑定邮箱和手机立即绑定

在 Go 中在 int 和 int64 之间进行转换时获得不同的输出;是因为处理器架构吗?

在 Go 中在 int 和 int64 之间进行转换时获得不同的输出;是因为处理器架构吗?

Go
缥缈止盈 2021-10-25 16:28:41
我用来测试某些预期行为的应用程序的一小部分给出了不同的输出,具体取决于我运行它的处理器。这是代码的相关部分:   for b := 0; b < intCounter; b++ {            //int64Random = rand.Int63()            int64Random = int64(rand.Int())//CHECKING FOR SANITYfmt.Println("int64Random is " + strconv.FormatInt(int64Random, 10))            slcTestNums = append(slcTestNums, int64Random)    }当我在我的 Mac(amd64,darwin)上运行它时,我得到如下输出:int64Random is 2991558990735723489int64Random is 7893058381743103687int64Random is 7672635040537837613int64Random is 1557718564618710869int64Random is 2107352926413218802当我在 Pi(arm,linux)上运行它时,我得到如下输出:int64Random is 1251459732int64Random is 1316852782int64Random is 971786136int64Random is 1359359453int64Random is 729066469如果在 Pi 上我将 int64Random 更改为 = rand.Int63() 并重新编译,我会得到如下输出:int64Random is 7160249008355881289int64Random is 7184347289772016444int64Random is 9201664581141930074int64Random is 917219239600463359int64Random is 6015348270214295654...这更接近 Mac 所得到的。这是因为处理器架构在运行时发生了变化吗?为什么int64(rand.Int())生成 int64 范围的数字而不是保留一个 int 范围的数字,而是更改它所存储的变量的类型?我是否错过了提到这种行为的 Go 文档?
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 166 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信