英文:
Weird result of 2 * 2i in Golang
问题
根据给出的代码,j
的值是 2 * 2i
,其中 2i
表示复数。在 Go 语言中,复数可以用 i
后缀来表示。在这种情况下,2i
表示一个虚数,其实部为 0,虚部为 2。因此,2 * 2i
的结果是 (0+4i)
,即实部为 0,虚部为 4 的复数。
英文:
Per this
package main
import "fmt"
var i = 2
func main() {
j := 2 * 2i
fmt.Println(j)
}
Why the result is (0+4i)
? Could someone explain it clearly?
答案1
得分: 4
Go语言内置了复数(complex numbers)作为一种数字类型,包括对复数字面量的支持。它们是一种相对较少使用的特性,但使用了相当标准的表示法。
混淆的原因可能是你有一个名为i
的变量。实际上,在你的程序中没有使用这个变量。你在2 * 2i
中看到的字符i
实际上被复数字面量所使用,它与变量i
无关。
尝试将变量声明放在下面,像这样:
func main() {
var i = 2
j := 2 * 2i
fmt.Println(j)
}
你会发现实际上会得到一个编译器错误:
i declared but not used
你可以在这里查看语言特性的文档:https://golang.org/ref/spec#Imaginary_literals
英文:
Go has complex numbers as a built-in numeric type, including support for complex literals. They're a relatively obscure feature, but they use a fairly standard notation.
The reason for the confusion may be that you have this variable i
. That variable is actually not used in your program. The "i" character you see in 2 * 2i
is actually being consumed by the complex number literal. It is not related to the variable i
.
Try moving the variable declaration down like this:
func main() {
var i = 2
j := 2 * 2i
fmt.Println(j)
}
and you'll see that you actually get a compiler error:
i declared but not used
You can see the documentation for the language feature here: https://golang.org/ref/spec#Imaginary_literals
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论