【发布时间】:2019-02-09 11:11:01
【问题描述】:
在给定示例的 unit8 和 int8 数据类型上的算术运算中得到负数和零结果的原因是什么
package main
import (
"fmt"
)
func main() {
var u uint8 = 255
fmt.Println(u, u+1, u*u) // "255 0 1"
var i int8 = 127
fmt.Println(i, i+1, i*i) // "127 -128 1"
}
【问题讨论】:
-
您可以提出问题,那么您希望得到什么结果?
-
@hyde 我正在学习 Golang,据我了解,这些导致数据类型值溢出是我所知道的。
-
一般情况下,127 = 01111111b; that+1 = 10000000b = -128 当解释为有符号二进制补码整数时。但是语言的类型转换规则也很重要,所以不要为 Go 写答案。
-
和 255 = 11111111b; that+1 = 100000000b 9 位,无符号 8 位整数只适合 00000000b = 0,这基本上是所有现代 CPU 和语言处理无符号溢出的方式。
-
@hyde 谢谢,现在了解加法是如何工作的。