在Golang中,2 * 2i的结果很奇怪。

huangapple go评论142阅读模式
英文:

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

huangapple
  • 本文由 发表于 2021年6月9日 08:47:24
  • 转载请务必保留本文链接:https://go.coder-hub.com/67896119.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定