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。它甚至不是未定义的行为。