赞
踩
位运算符,位与,位或,异或。
位与是同1为1,其余为0。
位或是同0为0,其余为1。
异或是相同为0,不同为1。
将a和b转为二进制,结果为:36,63,27
- func main() {
- a := 62 //111110
- b := 37 //100101
- //位与
- fmt.Println(a & b)
- //位或
- fmt.Println(a | b)
- //异或
- fmt.Println(a ^ b)
- }
位移运算符,左移运算符,右移运算符
左移运算符:<<高位丢弃,低位补0,四位一组,若是一组不足四位的,前面补零。
右移运算符:>>低位丢弃,高位补0
左移运算符,值左移n次=值乘以2的n次幂,比如下面的例子,a的值左移1次,就是a乘以2的1次幂。
- func main() {
- a := 99
- b := a << 1
- fmt.Println(b)
- }
但下面这个例子又有所不同
- func main() {
- var a int8 = 98
- b := a << 1
- fmt.Println(b)
- }
因为int8的值是有限的,只有-128~127这个范围,而98左移一位是196,超出了int8的范围,将196转换为二进制是1100100,最左边的是原始符号位,现在原始符号位为1,原始符号位1代表负数,0代表正数,现在它是负数的补码,用十进制196减1后,它的二进制是11000011,原始符号位不变,后面取反,成为了10111100,最终的结果为-60。
右移运算符:值右移n次=值除以2的n次幂,比如下面例子,a的值右移2次,也就是a除以2的2次幂。
- func main() {
- var a int8 = 30
- b := a >> 2
- fmt.Println(b)
- }
因为是整型,所以最后的结果也是整型。
交换变量,在go语言中提供了最简单的方式,比如下面代码:
- func main() {
- a := 10
- b := 22
- a, b = b, a
- fmt.Println(a, b)
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。