For Golang code:
import "fmt"
func main() {
var a uint8 = 1
var b uint8 = 1
fmt.Printf("%T %v %b\n", uint32(a^b)-1, uint32(a^b)-1, uint32(a^b)-1)
fmt.Printf("%T %v %b\n", uint32(uint8(0))-1, uint32(uint8(0))-1, uint32(uint8(0))-1)
}
When I run the above code, what I expect to see is, for both
fmt.Printf("%T %v %b\n", uint32(a^b)-1, uint32(a^b)-1, uint32(a^b)-1)
and
fmt.Printf("%T %v %b\n", uint32(uint8(0))-1, uint32(uint8(0))-1, uint32(uint8(0))-1),
there should be constant -1 overflows uint32 error.
The actual execution result:
fmt.Printf("%T %v %b\n", uint32(a^b)-1, uint32(a^b)-1, uint32(a^b)-1) executed successfully.
fmt.Printf("%T %v %b\n", uint32(uint8(0))-1, uint32(uint8(0))-1, uint32(uint8(0))-1) caused constant -1 overflows uint32 error.
Could someone help explain this? Thanks!