Go 语言 int8 / uint8 / int16 / uint16 / int32 / uint32 / int64 / uint64 / int / uint 的最大值与最小值

yufei       5 年, 8 月 前       5320

你说 Go 吧,有时候写起代码来会很舒服,因为语言足够简单,类库也足够齐全,但有时候还真得费点脑筋,比如说各种整型的最大值。

CC++ 这样的语言还有一个标准库 <limits.h> 定义了各种整型的最大值和最小值,比如 int 类型的最大值常量 INT_MAX,最小值常量 INT_MIN,无符号整型 uint 类型的最大值常量 UINT_MAX

然而,Go 语言就没有,还好,它比较简单,有位操作符,我们就可以直接使用位操作符来获取各种类型的最大值

比如无符号 32 位整型 uint32

它的最小值为 0 ,这个应该没异议吧,而最大值,可以用下面的语法来定义

const UINT32_MIN uint32 = 0
const UINT32_MAX uint32 = ^uint32(0)

为什么呢 ?

  1. 最小值 0 的二进制格式中,所有的位都是 0 ,也就是 00000000 00000000 00000000 00000000
  2. 而最大值,就是所有的 32 位都是 1 ,也就是 11111111 11111111 11111111 11111111 ,这不就是 0 的取反

而对于有符号的 32 位整型 int32

  1. 最大值为 const INT32_MAX = int(^uint(0) >> 1)

    最大值就是从左到右,除了第一位为 0 ,其它位都是 1 ,二进制格式为 01111111 11111111 11111111 11111111 。这个二进制,就是 ^uint32(0) >> 1

  2. 最小值为 const INT32_MIN = ^INT32_MAX

    最小值就是从左到右,除了第一位为 1 ,其它为都是 0,二进制格式为 10000000 0000000 00000000 00000000 ,不就是最大值的取反 ^INT32_MAX

    其实,很多人应该会问,最小值为什么不是全部都是 1,说起来就话长了,这涉及到 补码 的知识,以后有空再讲解吧

至于其它位数的整型,如法炮制即可

目前尚无回复
简单教程 = 简单教程,简单编程
简单教程 是一个关于技术和学习的地方
现在注册
已注册用户请 登入
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.