猿问

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

我用来测试某些预期行为的应用程序的一小部分给出了不同的输出,具体取决于我运行它的处理器。这是代码的相关部分:


   for b := 0; b < intCounter; b++ {


            //int64Random = rand.Int63()

            int64Random = int64(rand.Int())


//CHECKING FOR SANITY

fmt.Println("int64Random is " + strconv.FormatInt(int64Random, 10))


            slcTestNums = append(slcTestNums, int64Random)

    }

当我在我的 Mac(amd64,darwin)上运行它时,我得到如下输出:


int64Random is 2991558990735723489

int64Random is 7893058381743103687

int64Random is 7672635040537837613

int64Random is 1557718564618710869

int64Random is 2107352926413218802

当我在 Pi(arm,linux)上运行它时,我得到如下输出:


int64Random is 1251459732

int64Random is 1316852782

int64Random is 971786136

int64Random is 1359359453

int64Random is 729066469

如果在 Pi 上我将 int64Random 更改为 = rand.Int63() 并重新编译,我会得到如下输出:


int64Random is 7160249008355881289

int64Random is 7184347289772016444

int64Random is 9201664581141930074

int64Random is 917219239600463359

int64Random is 6015348270214295654

...这更接近 Mac 所得到的。这是因为处理器架构在运行时发生了变化吗?为什么int64(rand.Int())生成 int64 范围的数字而不是保留一个 int 范围的数字,而是更改它所存储的变量的类型?我是否错过了提到这种行为的 Go 文档?


缥缈止盈
浏览 167回答 1
1回答
随时随地看视频慕课网APP

相关分类

Go
我要回答