运算符

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()
}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!