运算符
1. 算术运算符
运算符 |
描述 |
+ |
相加 |
- |
相减 |
* |
相乘 |
/ |
相除 |
% |
取余 |
2. 逻辑运算符
运算符 |
描述 |
&& |
逻辑 AND 运算符。 如果两边的操作数都是 True,则为 True,否则为 False。 |
|
|
! |
逻辑 NOT 运算符。 如果条件为 True,则为 False,否则为 True。 |
3. 位运算
位运算符对整数在内存中的二进制位进行操作。
运算符 |
描述 |
& |
参与运算的两数各对应的二进位相与。(两位均为1才为1) |
|
|
^ |
参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。(两位不一样则为1) |
<< |
左移n位就是乘以2的n次方。 “a<<b”是把a的各二进位全部左移b位,高位丢弃,低位补0。 |
>> |
右移n位就是除以2的n次方。“a>>b”是把a的各二进位全部右移b位。 |
1 2 3 4 5
| 正数在计算机中二进制还是原值,负数在计算机中存储的是补码
原码:一个整数,按照绝对值大小转换成的二进制数,称为原码 反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。 补码:反码加1称为补码
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| func main() { fmt.Println("5 二进制:", binaryFormat(5)) fmt.Println("-5 二进制:", binaryFormat(-5)) /* 5 二进制: 00000000000000000000000000000101 -5 二进制: 11111111111111111111111111111011 */ fmt.Println("-260 << 23 二进制:", binaryFormat(-260<<23)) // 01111110000000000000000000000000 此时就是正数 }
// 输出一个int64对应的二进制 func binaryFormat(n int64) string { // 用于做字符串拼接的 效果比 + 好 sb := strings.Builder{} // math.Pow(2, 31) 构建一个32位二进制 最高位为1 其余为0 // 只想单纯保存为二进制 将其转为64位bit c := int64(math.Pow(2, 31)) for i := 0; i < 32; i++ { // 判断n与当前c 做与运算 由于c只有一位是1,以此来判断当前是否是1 if n&c != 0 { // sb字符串追加1 sb.WriteString("1") } else { sb.WriteString("0") } c >>= 1 // 将1右移 } return sb.String() }
|