1. 首页
  2. 主题
  3. Go问与答

=========加法运算结果不符合预期=========

FreeWong · · 3097 次点击
```go func main() { var a uint8 = math.MaxUint8 fmt.Println(a) fmt.Println(a + a) } ``` // 结果居然是 254 ,和溢出的计算方法一样,去掉了字节高位 但是为什么呢 不符合大众的预期啊 感谢感谢
```go func add[signed ~int | ~int8 | ~int16 | ~int32 | ~int64](x, y signed) signed { s := x + y if (x^s)&(y^s) < 0 { // (+) + (+) = (-) || (-) + (-) = (+) panic("signed overflow") } return s } func subtract[signed ~int | ~int8 | ~int16 | ~int32 | ~int64](x, y signed) signed { d := x - y if (x^y)&(x^d) < 0 { // (+) - (-) = (-) || (-) - (+) = (+) panic("signed overflow") } return d } ```
#10
更多评论
```go 1111 1111 + 1111 1111 ─────────────── 1 1111 1110 后8字节 1111 1110 = 254 ```
#1
<a href="/user/zzustu" title="@zzustu">@zzustu</a> 感谢,知道将高位字节丢弃了,我的问题就是为什么要丢失 , 难道在 golang 中 uint8 + uint8=uint8 ?
#2

用户登录

没有账号?注册

今日阅读排行

    加载中

一周阅读排行

    加载中