Golang类型转换负数

时间:2019-06-22 10:51:33

标签: go

在将负数强制转换为无符号整数并随后加上该值时,将导致相减。

a := (uint8)(10)
b := (int8)(-8)
fmt.Println(a + (uint8)(b)) // result: 2

这是一种惯用的方法还是应该更明确地进行?

1 个答案:

答案 0 :(得分:2)

由于类型是无符号的,因此它是overflow
uint8(b)248,所以a + uint8(b)10+248=258=256+2 => 2

  

我的问题更多是关于如何从无符号整数中减去   值(有时要加,有时要减去)即将到来   从参数(必须是带符号的类型)中获取,以便   您必须先进行类型转换,然后再进行减法/加法运算。

您可以同时使用int8


    a := int8(10)
    b := int8(-8)
    fmt.Println(a + b) // 2
    fmt.Println(a - b) // 18

您可以避免溢出,例如this

    a := uint8(10)
    b := int8(-8)
    c := uint8(b)
    d := uint16(a) + uint16(c)
    fmt.Println(d) // 258

您应在此处删除3对多余的括号:

  

a:=(uint8)(10)
  b:=(int8)(-8)
  fmt.Println(a +(uint8)(b))

使用此:

a := uint8(10)
b := int8(-8)
fmt.Println(a + uint8(b))

请参阅:
confusion about convert `uint8` to `int8`