package main
import (
"fmt"
)
func main() {
//电路问题
//位运算:二进制上的0 false 1 true
//& 与运算:两个位都为1时,结果才为1,0 1
//| 或运算:两个位都为0时,结果才为1
// 60 0011 1100
// 13 0000 1101
//----------------
// & 0000 1100 我和你都是1,结果才是1
// | 0011 1101 我和你有一个是1,结果就是1
// ^ 0011 0001 我和你不一样,结果就是1
// &^ 0011 0000 我是1,你是0,结果就是1
// << 左移运算符
// >> 右移运算符
var a uint = 60 // 0011 1100
var b uint = 13 // 0000 1101
var c uint = 0
//位运算
c = a & b
fmt.Printf("a & b 的值为 %d,二进制:%b\n", c, c)
c = a | b
fmt.Printf("a | b 的值为 %d,二进制:%b\n", c, c)
c = a ^ b
fmt.Printf("a ^ b 的值为 %d,二进制:%b\n", c, c)
c = a &^ b
fmt.Printf("a &^ b 的值为 %d,二进制:%b\n", c, c)
//移位运算
c = a << 2
fmt.Printf("a << 2 的值为 %d,二进制:%b\n", c, c)
c = a >> 2
fmt.Printf("a >> 2 的值为 %d,二进制:%b\n", c, c)
}
/*运行结果:
a | b 的值为 61,二进制:111101
a ^ b 的值为 49,二进制:110001
a &^ b 的值为 48,二进制:110000
a << 2 的值为 240,二进制:11110000
a >> 2 的值为 15,二进制:1111
*/
☘赋值运算符
运算符
描述
实例
=
赋值
C = A + B 将A+B表达式的结果赋值给C
+=
相加后赋值
C += A 等于 C = C + A
-=
相减后赋值
C -= A 等于 C = C - A
*=
相乘后赋值
C = A 等于 C = C A
/=
相除后赋值
C /= A 等于 C = C / A
%=
求余后赋值
C %= A 等于 C = C % A
<<=
左移会赋值
C <<= 2 等于 C = C << 2
>>=
右移后赋值
C >>= 2 等于 C = C >> 2
&=
按位与后赋值
C &= 2 等于 C = C & 2
^=
按位异或后赋值
C ^= 2 等于 C = C ^ 2
!=
按位或后赋值
C \
=2 等于 C = C \
2
package main
func main() {
var a int = 10
var b int
// =赋值
b = a // 把a的值赋给b
println("b = ", b)
// +=赋值 a = a + 1 等价于 a += 1
a += 1
println("a = ", a)
// -=赋值 a = a - 1 等价于 a -= 1
a -= 1
println("a = ", a)
// *=赋值 a = a * 1 等价于 a *= 1
a *= 1
println("a = ", a)
// /=赋值 a = a / 1 等价于 a /= 1
a /= 1
println("a = ", a)
// %=赋值 a = a % 1 等价于 a %= 1
a %= 1
println("a = ", a)
// <<=赋值 a = a << 1 等价于 a <<= 1
a <<= 1
println("a = ", a)
// >>=赋值 a = a >> 1 等价于 a >>= 1
a >>= 1
println("a = ", a)
// &=赋值 a = a & 1 等价于 a &= 1
a &= 1
println("a = ", a)
// ^=赋值 a = a ^ 1 等价于 a ^= 1
a ^= 1
println("a = ", a)
// |=赋值 a = a | 1 等价于 a |= 1
a |= 1
println("a = ", a)
// &^=赋值 a = a &^ 1 等价于 a &^= 1
a &^= 1
println("a = ", a)
}
/*运行结果:
b = 10
a = 11
a = 10
a = 10
a = 10
a = 0
a = 0
a = 0
a = 0
a = 1
a = 1
a = 0
*/
内容的丰富性和深度让人仿佛置身于知识的海洋,受益匪浅。