golang学习笔记4:基本类型和运算符

布尔类型 bool

布尔型的值只可以是常量 true 或者 false。一个简单的例子: var b bool = true 。两个类型相同的值可以使用相等 == 或者不等 != 运算符来进行比较并获得一个布尔型的值。当相等运算符两边的值是完全相同的值的时候会返回 true,否则返回 false,并且只有在两个的值的类型相同的情况下才可以使用。

布尔型的常量和变量也可以通过和逻辑运算符(非 ! 、和 && 、或 || )结合来产生另外一个布尔值,这样的逻辑语句就其本身而言,并不是一个完整的 Go 语句。

整型 int 和浮点型 float

Go 语言支持整型和浮点型数字,并且原生支持复数,其中位的运算采用补码。 Go 也有基于架构的类型,例如:int、uint 和 uintptr。 这些类型的长度都是根据运行程序所在的操作系统类型所决定的: int 和 uint 在 32 位操作系统上,它们均使用 32 位(4 个字节),在 64 位操作系统上,它们均使用 64 位(8 个字节)。 uintptr 的长度被设定为足够存放一个指针即可。 Go 语言中没有 float 类型。 与操作系统架构无关的类型都有固定的大小,并在类型的名称中就可以看出来: 整数: int8(-128 -> 127) int16(-32768 -> 32767) int32(-2,147,483,648 -> 2,147,483,647) int64(-9,223,372,036,854,775,808 -> 9,223,372,036,854,775,807) 无符号整数: uint8(0 -> 255) uint16(0 -> 65,535) uint32(0 -> 4,294,967,295) uint64(0 -> 18,446,744,073,709,551,615) 浮点型(IEEE-754 标准): float32(+- 1e-45 -> +- 3.4 * 1e38) float64(+- 5 1e-324 -> 107 1e308) int 型是计算最快的一种类型。

字符类型

严格来说,这并不是 Go 语言的一个类型,字符只是整数的特殊用例。 byte 类型是 uint8 的别名,对于只占用 1 个字节的传统 ASCII 编码的字符来说,完全没有问题。例如: var ch byte = 'A' ;字符使用单引号括起来。

在 ASCII 码表中,A 的值是 65,而使用 16 进制表示则为 41,所以下面的写法是等效的:var ch byte = 65 或 var ch byte = '\x41'( \x 总是紧跟着长度为 2 的 16 进制数)

另外一种可能的写法是 \ 后面紧跟着长度为 3 的八进制数,例如: \377 。

不过 Go 同样支持 Unicode(UTF-8),因此字符同样称为 Unicode 代码点或者 runes,并在内存中使用 int来表示。在文档中,一般使用格式 U+hhhh 来表示,其中 h 表示一个 16 进制数。其实 rune 也是 Go 当中的一个类型,并且是 int32 的别名。

在书写 Unicode 字符时,需要在 16 进制数之前加上前缀 \u 或者 \U 。 因为 Unicode 至少占用 2 个字节,所以我们使用 int16 或者 int 类型来表示。如果需要使用到 4 字节,则会加上 \U 前缀;前缀 \u 则总是紧跟着长度为 4 的 16 进制数,前缀 \U 紧跟着长度为 8 的16 进制数。

var ch int = '\u0041'

var ch2 int = '\u03B2'

var ch3 int = '\U00101234'

fmt.Printf("%d - %d - %d\n", ch, ch2, ch3) // integer

fmt.Printf("%c - %c - %c\n", ch, ch2, ch3) // character

fmt.Printf("%X - %X - %X\n", ch, ch2, ch3) // UTF-8 bytes

fmt.Printf("%U - %U - %U", ch, ch2, ch3) // UTF-8 code point

输出:

1. 65 - 946 - 1053236

2. A - β - r

3. 41 - 3B2 - 101234

4. U+0041 - U+03B2 - U+101234

格式化说明符 %c 用于表示字符;当和字符配合使用时, %v 或 %d 会输出用于表示该字符的整数; %U输出格式为 U+hhhh 的字符串。 包 unicode 包含了一些针对测试字符的非常有用的函数(其中 ch 代表字符): 判断是否为字母: unicode.IsLetter(ch) 判断是否为数字: unicode.IsDigit(ch) 判断是否为空白符号: unicode.IsSpace(ch) 这些函数返回一个布尔值。

运算符与优先级

有些运算符拥有较高的优先级,二元运算符的运算方向均是从左至右。下表列出了所有运算符以及它们的优先级,由上至下代表优先级由高到低:

7 ^ ! 6 * / % << >> & &^ 5 + - | ^ 4 == != < <= >= > 3 <- 2 && 1 ||

原文发布于微信公众号 - oldriver编程老司机(bclsj-cn)

原文发表时间:2018-10-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

Go语言的复合数据类型

Go语言的复合数据类型是基础数据类型的组合,主要包括四个数组,切片(slice),map和结构体。 数组和结构体的大小是固定大小的,数组的元素类型是固定的,结...

2825
来自专栏数据结构与算法

2277 爱吃皮蛋的小明

2277 爱吃皮蛋的小明  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 白银 Silver 题解  查看运行结果 题目描述 Descri...

2987
来自专栏mukekeheart的iOS之旅

《JavaScript高级程序设计》学习笔记(1)

欢迎关注本人的微信公众号“前端小填填”,专注前端技术的基础和项目开发的学习。 首先,我将从《JavaScript高级程序设计》这本JavaScript学习者必看...

2844
来自专栏chenjx85的技术专栏

leetcode-844-比较含退格的字符串(用vector取代stack)

给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。

721
来自专栏飞雪无情的博客

Go语言实战笔记(六)| Go Map

Map是一种数据结构,是一个集合,用于存储一系列无序的键值对。它基于键存储的,键就像一个索引一样,这也是Map强大的地方,可以快速快速检索数据,键指向与该键关联...

1041
来自专栏编程

python中的变量

变量与数据类型 变量 编程语言中为了能够更好的处理数据,都需要使用一些变量。Python 语言的变量可以是各种不同的数据类型,使用变量的时候不需要声明直接使用就...

2200
来自专栏Python小屋

小议Python列表和元组中的元素地址连续性

众所周知,在Python中字典和集合依赖元素哈希表来存储,并不存在传统意义上的所谓元素“顺序”,当然,如果需要一个有序的字典可以使用collections模块提...

36210
来自专栏Esofar 开发日记

JavaScript权威指南 - 对象

JavaScript对象可以看作是属性的无序集合,每个属性就是一个键值对,可增可删。 JavaScript中的所有事物都是对象:字符串、数字、数组、日期,等等...

872
来自专栏谈补锅

正则限制输入为数字,且最多输入2位小数 之 新写法

  原本小程序需要一个限制文本框输入为数字,且最多保留2位小数的效果,网上找到的例子感觉有点繁琐,就自己写了一个。

5982
来自专栏程序员互动联盟

【答疑释惑第三十五讲】c语言数组指针问题

疑惑一 数组名a与a[0] ? 这个问题其实是非常基础的,a代表的是一个数组,而a[0]只是数组的一个元素。数组a是一个常量,在某些时候可以转化为指针的功能(但...

3036

扫码关注云+社区

领取腾讯云代金券