go中的颜色操作
Color operation in go
有一些简单的颜色操作,但是输出错误。我只是想知道这里发生了什么。
main.c:
package main
import (
"fmt"
"image/color"
)
func main() {
startColor := color.RGBA{0x34, 0xeb, 0x64, 0xff}
endColor := color.RGBA{0x34, 0xc9, 0xeb, 0xff}
fmt.Printf("%d-%d=%d\n", endColor.G, startColor.G, endColor.G-startColor.G)
}
输出:
201-235=222
color.RGBA.G
is a uint8
. 因为 235 比 201 大,但是 uint8 不存储像 -34 这样的负数,所以这个值是换行的。
没有什么color
具体的情况。
你 get the same answer (222) 与:
var g1, g2 uint8 = 0xc9, 0xeb
fmt.Println(g1 - g2)
所以没有什么不寻常的,只是标准 Go unsigned integer overflow wrapping。它甚至不是未定义的行为。
有一些简单的颜色操作,但是输出错误。我只是想知道这里发生了什么。
main.c:
package main
import (
"fmt"
"image/color"
)
func main() {
startColor := color.RGBA{0x34, 0xeb, 0x64, 0xff}
endColor := color.RGBA{0x34, 0xc9, 0xeb, 0xff}
fmt.Printf("%d-%d=%d\n", endColor.G, startColor.G, endColor.G-startColor.G)
}
输出:
201-235=222
color.RGBA.G
is a uint8
. 因为 235 比 201 大,但是 uint8 不存储像 -34 这样的负数,所以这个值是换行的。
没有什么color
具体的情况。
你 get the same answer (222) 与:
var g1, g2 uint8 = 0xc9, 0xeb
fmt.Println(g1 - g2)
所以没有什么不寻常的,只是标准 Go unsigned integer overflow wrapping。它甚至不是未定义的行为。