C++ 为什么将float64转换为int32会在Go中给出一个负数?

C++ 为什么将float64转换为int32会在Go中给出一个负数?,c++,go,floating-point,ieee-754,C++,Go,Floating Point,Ieee 754,偶尔,我们在Golang错误地直接将float64转换为int32 raw=529538871408 fv=64(原始) fmt.Println(原始) fmt.Println(fv) 格式打印LN(int32(fv)) 输出 529538871408 5.29538871408e+11 -2147483648 为什么int32(fv)给定一个负数 < >我们知道,C++中的长< /C> >和 FLUAT64/代码>在Golang中是64位IEEE 754双精度。所以我们在C中

偶尔,我们在Golang错误地直接将
float64
转换为
int32

raw=529538871408
fv=64(原始)
fmt.Println(原始)
fmt.Println(fv)
格式打印LN(int32(fv))
输出

529538871408
5.29538871408e+11
-2147483648       
为什么
int32(fv)
给定一个负数

< >我们知道,C++中的<代码>长< /C> >和<代码> FLUAT64/代码>在Golang中是64位IEEE 754双精度。所以我们在C中尝试相同的代码++

int64_t iv=529538871408;

在go中,可以溢出到符号位

package main

import (
    "fmt"
)

func main() {
    a, b := int32(2147483647), int32(1)
    c := a + b
    fmt.Printf("%d %T", c, c)
}

我不知道
golang
,但
int32
表示范围
[-2147483648,2147483647]
(两个字的恭维)。529538871408>2^31所以,溢出。符号溢出可能在“代码> GORANG/CODER >中是可以的,但是它们不是C++(直到C++ 20)。“为什么In32(Fv)给出了负数?”因为语言规范说必须这样做。你在GO中做了一些不明确的事情:“Volker,你能让我看看语言规范的链接吗?”
package main

import (
    "fmt"
)

func main() {
    a, b := int32(2147483647), int32(1)
    c := a + b
    fmt.Printf("%d %T", c, c)
}