数据长度
在golang的builtin包,有如下数据长度
uint8 | Range: 0 through 255. |
uint16 | Range: 0 through 65535. |
uint32 | Range: 0 through 4294967295. |
uint64 | Range: 0 through 18446744073709551615. |
uint | // uint is an unsigned integer type that is at least 32 bits in size. It is a // distinct type, however, and not an alias for, say, uint32. |
一、uint溢出问题
问:golang开发中,这里输出44,为什么是44而不是300呢?
package main
import "fmt"
func main() {
var a uint8 = 100
var b uint8 = 200
var c uint8 = a + b
fmt.Println(c)
}
输出44
总结:
代码中涉及到了无符号整型(uint8)的溢出。在Go语言中,uint8的取值范围是0-255。
当你试图将100和200相加时,结果是300,超出了uint8的上限255。
在这种情况下,Go会保留结果的最低8位(也就是将结果对256取余),所以我们得到的结果是 300 % 256 = 44。因此,程序输出了44。
二、uint的数据长度
在Go语言中,uint 类型的长度取决于目标平台的位数。在32位系统(如GOARCH=386)上,uint`的长度为32位,其最大值为2^32-1,即4294967295。在64位系统上,uint的长度为64位,其最大值为2^64-1
示例:
package main
import "fmt"
func main() {
fmt.Println(^uint(0))
}
在64位系统上输出为,既2的64次方-1
18446744073709551615