198
社区成员
发帖
与我相关
我的任务
分享5-10=?结果是多少?那很明显是-5,这是在有符号的范围,那是正确答案,如果是无符号呢?
package main
import (
"fmt"
)
type Person struct {
Name string
fmembers map[string]string
}
func main() {
var i1 uint8 = 5
var i2 uint8 = 10
fmt.Printf("%08b,%v", i1-i2, i1-i2)
}
答案是251,是不是感觉有点神奇,其实这个还得从计算机只能识别二进制开始,对于有符号的情况,那么第一位表示符号,所以-5的二进制在有符号中的表示是11111011(-128+64+32+16+8+0+2+1=-5),那这个二进制当作无符号的情况就是251了。
换成有符号的看下二进制的情况:
func main() {
var i1 int8 = 5
var i2 int8 = 10
fmt.Printf("%08b,%v", i1-i2, i1-i2)
}
//-0000101,-5
我们来看下无符号的整型的数值范围:
uint8:0 ~ 2^8-1=255
uint16:0 ~2^16-1=65535
uint32: 0 ~ 2^32-1=4294967295
uint64: 0 ~ 2^64-1=18446744073709552000
对应的有符号的范围就是除以2,负数+1,以及正数和0
int8:-128 ~ 127
int16:-32768-32767
int32:-2147483648-2147483647
int64:-9223372036854775808-9223372036854775807