03. 详解数据类型:****整形与浮点型(03.08)

网友投稿 296 2022-08-17

03. 详解数据类型:****整形与浮点型(03.08)

01. 整形

Go 语言中,整数类型可以再细分成10个类型,为了方便大家学习,我将这些类型整理成一张表格。

int 和 uint 的区别就在于一个 u,有 u 说明是无符号,没有 u 代表有符号。

解释这个符号的区别

以 int8 和 uint8 举例,8 代表 8个bit,能表示的数值个数有 2^8 = 256。

uint8 是无符号,能表示的都是正数,0-255,刚好256个数。

int8 是有符号,既可以正数,也可以负数,那怎么办?对半分呗,-128-127,也刚好 256个数。

int8 int16 int32 int64 这几个类型的最后都有一个数值,这表明了它们能表示的数值个数是固定的。

而 int 没有并没有指定它的位数,说明它的大小,是可以变化的,那根据什么变化呢?

当你在32位的系统下,int 和 uint 都占用 4个字节,也就是32位。

若你在64位的系统下,int 和 uint 都占用 8个字节,也就是64位。

出于这个原因,在某些场景下,你应当避免使用 int 和 uint ,而使用更加精确的 int32 和 int64,比如在二进制传输、读写文件的结构描述(为了保持文件的结构不会受到不同编译目标平台字节长度的影响)

不同进制的表示方法

出于习惯,在初始化数据类型为整形的变量时,我们会使用10进制的表示法,因为它最直观,比如这样,表示整数10.

var num int = 10

不过,你要清楚,你一样可以使用其他进制来表示一个整数,这里以比较常用的2进制、8进制和16进制举例。

2进制:以0b或0B为前缀

var num01 int = 0b1100

8进制:以0o或者 0O为前缀

var num02 int = 0o14

16进制:以0x 为前缀

var num03 int = 0xC

下面用一段代码分别使用二进制、8进制、16进制来表示 10 进制的数值:12

package main

import (

    "fmt"

)

func main() {

    var num01 int = 0b1100

    var num02 int = 0o14

    var num03 int = 0xC

    fmt.Printf("2进制数 %b 表示的是: %d \n", num01, num01)

    fmt.Printf("8进制数 %o 表示的是: %d \n", num02, num02)

    fmt.Printf("16进制数 %X 表示的是: %d \n", num03, num03)

}

输出如下

2进制数 1100 表示的是: 12 

8进制数 14 表示的是: 12 

16进制数 C 表示的是: 12

以上代码用过了 fmt 包的格式化功能,你可以参考这里去看上面的代码

%b    表示为二进制

%c    该值对应的unicode码值

%d    表示为十进制

%o    表示为八进制

%q    该值对应的单引号括起来的go语法字符字面值,必要时会采用安全的转义表示

%x    表示为十六进制,使用a-f

%X    表示为十六进制,使用A-F

%U    表示为Unicode格式:U+1234,等价于"U+%04X"

02. 浮点型

浮点数类型的值一般由整数部分、小数点“.”和小数部分组成。

其中,整数部分和小数部分均由10进制表示法表示。不过还有另一种表示方法。那就是在其中加入指数部分。指数部分由“E”或“e”以及一个带正负号的10进制数组成。比如,3.7E-2表示浮点数0.037。又比如,3.7E+1表示浮点数37。

有时候,浮点数类型值的表示也可以被简化。比如,37.0可以被简化为37。又比如,0.037可以被简化为.037。

有一点需要注意,在Go语言里,浮点数的相关部分只能由10进制表示法表示,而不能由8进制表示法或16进制表示法表示。比如,03.7表示的一定是浮点数3.7。

float32 和 float64

Go语言中提供了两种精度的浮点数 float32 和 float64。

float32,也即我们常说的单精度,存储占用4个字节,也即4*8=32位,其中1位用来符号,8位用来指数,剩下的23位表示尾数

float64,也即我们熟悉的双精度,存储占用8个字节,也即8*8=64位,其中1位用来符号,11位用来指数,剩下的52位表示尾数

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:04. 详解数据类型:byte、rune与string(0406是什么星座)
下一篇:02. 学习五种变量创建的方法(02g等于多少毫克mg)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~