- 1.二进制
- 1.1什么是二进制
- 1.2有符号与无符号
- 1.3原码反码补码
- 1.3有符号与无符号
- 1.4位运算
- 1.4.1与运算(and &)
- 1.4.2或运算(or |)
- 1.4.3异或运算(xor ^)
- 1.4.4非运算(单目运算符 not ~)
- 1.4.5位运算(移动位)
- 1.5二进制加法
- 2.python中使用
二进制是由0和1组成,逢2进1。
而十进制是逢10进1
例如:1, 10, 101, 1010111这些都是二进制数。
十进制由0-9组成。
例如:0, 9, 5, 12, 58这些都是十进制数。
计算机只认识二进制,所有的运算都是通过二进制。我们现在用的一些编程语言在最后都会编译成二进制。二进制才是计算机的本质。
| 二进制 | 十进制 |
|---|---|
| 1 | 1 |
| 10 | 2 |
| 11 | 3 |
| 100 | 4 |
| 101 | 5 |
| 110 | 6 |
| 111 | 7 |
| 1000 | 8 |
| 1001 | 9 |
按照一个字节等于8位来计算1byte=8bit
无符号
是什么就是是什么
有符号
最高位是符号位:1(负数) 0(正数)
| 十进制 | 二进制 |
|---|---|
| -1 | 1000 0001 |
| 1 | 0000 0001 |
| -10 | 1000 0001 |
而在二进制中,由三种形式分别为:原码,反码,补码
原码:
最高位符号位
反码:
正数:反码和原码相同
负数:符号位一定是1,其余位对原码取反。
补码:
正数:补码和原码相同
负数:符号位一定是1,反码+1
按照一个字节等于8位来计算1byte=8bit
无符号
是什么就是是什么
1000 0001就是1000 0001
有符号
最高位是符号位:1(负数) 0(正数)
| 十进制 | 二进制 |
|---|---|
| -1 | 1000 0001 |
| 1 | 0000 0001 |
| -10 | 1000 0001 |
计算机不知道加法是什么,减法是什么,只知道以下这些操作。
1.4.1与运算(and &)两个都为1,结果变为1
1011 0001 1101 1000
结果:1001 0000
1.4.2或运算(or |)只要一个为1,结果变为1
1011 0001 1101 1000
结果:1111 1001
1.4.3异或运算(xor ^)不相同的,则变为1
1011 0001 1101 1000
结果:0110 1001
1.4.4非运算(单目运算符 not ~)0变1,1变0
1101 1000
结果:0010 0111
1.4.5位运算(移动位)左移(<<)
0000 0001 # 所有二进制数向左移位,高位丢弃,低位补0。 # 结果 0000 0010 # 例如向左一位
右移( >>)
0000 0001 # 所有二进制数向右移位,低位丢弃,高位补0或1(符号位决定) #结果 0000 0000 # 例如向右一位1.5二进制加法
十进制:1+2
计算机运算过程:
先进行异或运算
0000 0001 0000 0010
结果:0000 0011
再进行与运算,如果得出的结果是:0000 0000,则最总结果为上一步的异或结果
0000 0001 0000 0010
结果:0000 0000
所以最总结果为0000 0011,十进制表示为3,1+2 就等于3
2.python中使用a = 3
b = 4
print("a二进制表示:",bin(a))
print("b二进制表示:",bin(b))
print("n")
print("与运算")
print("a&b十进制结果:",a&b)
print("a&b二进制结果:",bin(a&b))
print("n")
print("或运算")
print("a|b十进制结果:",a|b)
print("a|b二进制结果:",bin(a|b))
print("n")
print("异或运算")
print("a^b十进制结果:",a^b)
print("a^b二进制结果:",bin(a^b))
print("n")
print("非运算")
print("~a二进制结果:",bin(~a))
print("~a十进制结果:",~a)
print("~b二进制结果:",bin(~b))
print("~b十进制结果:",~b)
print("n")
print("左移")
print("a<<1十进制结果:",a<<1)
print("a<<1二进制结果:",bin(a<<1))
print("b<<1十进制结果:",b<<1)
print("b<<1二进制结果:",bin(b<<1))
print("n")
print("右移")
print("a>>1十进制结果:",a>>1)
print("a>>1二进制结果:",bin(a>>1))
print("b>>1十进制结果:",b>>1)
print("b>>1二进制结果:",bin(b>>1))
运算结果:
a二进制表示: 0b11 b二进制表示: 0b100 与运算 a&b十进制结果: 0 a&b二进制结果: 0b0 或运算 a|b十进制结果: 7 a|b二进制结果: 0b111 异或运算 a^b十进制结果: 7 a^b二进制结果: 0b111 非运算 ~a二进制结果: -0b100 ~a十进制结果: -4 ~b二进制结果: -0b101 ~b十进制结果: -5 左移 a<<1十进制结果: 6 a<<1二进制结果: 0b110 b<<1十进制结果: 8 b<<1二进制结果: 0b1000 右移 a>>1十进制结果: 1 a>>1二进制结果: 0b1 b>>1十进制结果: 2 b>>1二进制结果: 0b10



