go:基本数据类型
0. 基本数据类型比较
1. 两个类型相同的值可以使用相等 == 或者不等 != 运算符来进行比较并获得一个布尔型的值;
2. 如果值的类型是接口(interface),它们也必须都实现了相同的接口;
3. 如果其中一个值是常量,那么另外一个值的类型必须和该常量类型相兼容的
1. 布尔类型
布尔型的值只可以是常量 true 或者 false;
布尔型的常量和变量也可以通过和逻辑运算符(非 !
、和 &&
、或 ||
)结合来产生另外一个布尔值
短路特性:
&& 和 || 是具有快捷性质的运算符,当运算符左边表达式的值已经能够决定整个表达式的值的时候,运算符右边的表达式将不会被执行
2. 数字类型
2.1 整形和浮点型
Go 语言支持整型和浮点型数字,并且原生支持复数,其中位的运算采用补码;
基于架构的类型,例如:int、uint 和 uintptr,没有 float类型(只有 float32 和 float64),没有 double 类型;
int
和 uint
在 32 位操作系统上,它们均使用 32 位(4 个字节),在 64 位操作系统上,它们均使用 64 位(8 个字节)。
uintptr
的长度被设定为足够存放一个指针即可。
与操作系统架构无关的类型都有固定的大小:如 int8,int16,int32,int64,uint8,uint16,uint32,uint64,float32,float64
math包中的函数接收的数据类型均为 float64
你可以使用 a := uint64(0)
来同时完成类型转换和赋值操作,这样 a 的类型就是 uint64
前缀0表示8进制数,前缀0x表示16进制数,e表示10的联乘
2.2 复数
复数使用 re + iml 来表示,其中 re
代表实数部分,im
代表虚数部分,I 代表根号负 1。
var re complex128 = 1 + 2i
// 获取实数部分 real := real(re) // 获取虚数部分 Imaginary := imag(re) fmt.Println("real number:", real,"Imaginary number:", Imaginary) // 格式化输出 fmt.Printf("re:%v\n",re) // 实数或虚数为浮点型是可通过complex生成实数 var re2 = complex(2, 3) fmt.Println(re2)
2.3 位运算
位运算只能用于整数类型的变量,且需当它们拥有等长位模式时;
%b是用于表示位的格式化标识符;
& :都是1,则为1,否则为0
| :有一个为1则为1
^ :相同为0,不同为1
&^ :位清除,将 n 转换为2进制后,n 值为1的位置 s 对应为 0,s 剩余位置的值 为 m 对应位置的值
var n = 12 // 1100 var m = 13 // 1101 s := m &^ n fmt.Printf("%b\n",s) // 输出 1
<< :位左移,2 << 1,将2左移1位
>> :位右移,2 >> 1,将2右移1位
2.4 运算符
由上至下代表优先级由高到低
^ !
/ * % << >> & &^
+ - | ^
== != < <= >= >
<-
&&
||
2.4.1 位运算符
&、 |、 ^、 &^
2.4.2 逻辑运算符
==、 !=、 <、 <=、 > 、 >= 、&& 、||
2.4.3 算数运算符
用于整数和浮点型:+、-、*、/、%
a = b + c,可简写为 a+=b,改写法也适用于 -=、*=、/=、%=
整数除以0可能导致程序崩溃,浮点数除以0.0会返回一个无穷尽结果,用 +Inf 表示
3. 字符类型
字符只是整数的特殊用例。byte
类型是 uint8
的别名,对于只占用 1 个字节的传统 ASCII 编码的字符来说,完全没有问题。例如:var ch byte = 'A'
;字符使用单引号括起来