整数
整数操作
& 位运算 AND
| 位运算 OR
^ 位运算 XOR 异或
&^ 位清空
<< 左移
>> 右移
如果作为二元运算符,运算符^表示按位异或;若作为一元前缀运算符,就表示按位取反。
&^: 表达式 z=x&^y中,若y的某位是1,则z的对应为是0;否则,就等于x的对应位的值
var x uint8 = 1 << 1 | 1 << 5
var y uint8 = 1 << 1| 1 << 2
fmt.Printf("%08b\n", x)
fmt.Printf("%08b\n", y)
fmt.Printf("%08b\n", x&y)
fmt.Printf("%08b\n", x|y)
fmt.Printf("%08b\n", x^y)
fmt.Printf("%08b\n", x&^y)
00100010
00000110
00000010
00100110
00100100
00100000
还有复数,浮点数相关略过
字符串
字符串截取
s := "abc"
a := s[0:1]
s[:]
s[1:]
s[:1]
字符串不变性
s := "left foot"
t := s
s += ", right foot"
fmt.Println(s)
fmt.Println(t)
left foot, right foot
left foot
s := "left foot"
t := s
s += ", right foot"
t = s
fmt.Println(s)
fmt.Println(t)
left foot, right foot
left foot, right foot
这个并不改变s原有字符串的值,只是将+=语句生成的新字符串赋予了s。同时t仍然持有原先的字符串的值,除非再进行一次变量的赋值。因为字符串不可改变,所以以下操作会存在编译错误
s[0] = "a"
不可变意味着两个字符串能安全的共用同一段底层内存,使得复制任何长度字符串的开销都很低廉。生成子串的操作也同样低廉
字符串字面量
类似于scala中定义””” “”” 包裹的字符串
const ToDOList = `
1. xxxx
2. wwww`
字符串和字节slice互换
s := "abc"
b := []byte(s)
s2 := string(b)
[]byte(s)转换操作会分配新的字节数组,拷贝s含有的字节,并生成一个slice引用,指向整个数组,在修改数组后,原字符串并不会收到影响
字符串和数字互换
- sprintf
x := 123
y := fmt.Sprintf("%d", x)
类似于java中的string.format
- strconv
将整数转换为十进制字符串形式
strconv.Itoa(x)
strconv.FormatInt(int64(x), 2) 按不同的进位制格式化数字效果类似于下
fmt.Sprintf("%b", x)
从字符串解析成数字
x, err = strconv.Atoi("123")
y, err = strconv.ParseInt("123", 10, 64) 十进制,最长为64位
参考: