58

go语言数值类型及布尔类型

 4 years ago
source link: https://www.tuicool.com/articles/3EVFBrj
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

常量

常量声明

常量是程序在编译时就确定的值,程序在执行时不能修改常量的值。声明常量使用关键字const。在声明常量时,需要对常量赋值。

const 名称 类型 = 值 或

const 名称 = 值 自动做类型推断

const aa int = 123 //正确
const aa = 123 //正确
const aa int   //错误

枚举

go语言没有提供枚举类型,可以借助常量来定义, iota默认值是0,在一组const定义中每次+1,

const (
        E int = iota // 东 0
        W            // 西 1
        S            // 南 2
        N            // 北 3
    )

    const (
        E1 int = iota + 3 // 东 3
        W1                // 西 4
        S1                // 南 5
        N1                // 北 6
    )

变量

变量是编程语言的重要组成元素,变量相当于内存空间的一个别名,在程序执行时,根据声明的变量,会在内存中开辟这样的一块存储单元。

变量声明

变量声明定义了内存中存储的规则和规范,如, var aa int8 的意思是请在内存中给我一块1byte的长度的存储单元,我要用来存储数字的转化后的补码,这里的声明,相当于定义,相当于盖房子画的图纸,在初始化时,真正的落实和执行。但是在基本类型声明时,会直接对其做初实化,也就是说,对于基本类型,在使用var声明时,声明和初始化是一起做的。

声明的语法

直接声明式

var 变量名 类型

类型推断式

var 变量名 = 值

简短声明(该种方式只能用于局部变量)

变量名 := 值

变量初始化

变量初始化是刚在上文说的开辟内存空间,符初值,整型类型默认的初值为0,也可以在声明时对其设定

例:

var aa int8 = 8
var bb = 11
cc := 3

在基本类型中,变量的声明和初始化实际上是一步,这里之所以分开阐述是为了说明实际上这是两步操作

变量赋值

在声明了变量后,就可以修改变量的值

变量的赋值很简单,使用 = 进行赋

注意

已经声明了的变量不能对其再次声明

如:

var aa int = 8
var aa int8

整型

当我们要把一个值变成计算机可以识别的处理,需要确定两点

  1. 存储的编码方式
  2. 存储的长度

对于整型数据,在计算机内部是以补码的方式,存储长度,go语言的提供的多种长度不同的整型数据类型。如下:

类型 长度 int8 1byte int16 2byte int32 4byte int64 8byte int 根据系统位数,4byte或8byte uint8 1byte uint16 2byte uint32 4byte uint64 8byte uint 根据系统位数,4byte或8byte byte 1byte rune 4byte

根据以上的内存单元的规范和我们已知的补码知识,可以得到每种类型的存储范围

在位计算中再做详细的展开。

浮点型

go语言支持的浮点型有两种float32,float64两种数据类型,它们的算术规范由IEEE754浮点数国际标准定义。

float32在内存分配4byte用于存储,float64内存中分配8byte用于存储。那么怎么分配这些存储单元,也就是编码规范。

看下它的国际标准是怎么定义的, 参考阮一峰博客

IrAZvaq.png!web

存储的编码规范又是怎么定义的呢?

[]( https://liushaobo-image-bk.os...

以上对浮点型数据的编码规范和存储做了说明。

复数型

go语言提供了复数数据类型complex64和complex128,这个在平时的代码中很少用的到,在此不做展开

布尔型

在一些编程语言中,没有bool类型使用0或1来标示go语言中的bool类型占一个存储单元

那个在内存中存储的是什么样?

通过gdb调试工具,进入内存中,一探究竟。

v2y22qm.jpg!web

计算符

一台标准的冯诺伊曼模型计算机,有cpu,寄存器, 内存,I/O设备组成,cpu和积存器组成了计算单元,内存是数据的存储单元,I/O设备是和作为计算机的入口和出口同外部进行交互。

数值计算的基本运算符有加,减,乘,除,模运算,在go语言中分别对应,+,-,*,/,%

在计算机内部是怎么完成运算的?该篇幅将单独作为一个专题做后文中详细展开。在此我们只需要知道,通过计算符连接的变量最终都会被转化为cpu的逻辑运算。

控制台输入输出

上文分别介绍了内存和计算符,那么怎么将计算的结果打印出来,也就是将内存中值,通过I/O设备输出?

go语言中内置的语言包中提供了这样的函数,我们只需要调用该函数,即可完成I/O操作。

在fmt包下有Scanln()用于输入,Println()用于输出。

总结

以上介绍了go语言的常量及变量的声明,及基本类型的内存存储方式做了总结和实验

喜欢请关注"云端漫记", 持续为你更新

2e2qErz.jpg!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK