golang中uint8和uint16的计算长度溢出问题,以及理解uint数据长度

数据长度

在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

  • 12
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值