🌤前言:
大家好,今天是学习总结篇。
对于位运算,正在我们平时的编程中比较少见,但是位运算却是非常基础的python内容。灵活的使用位运算可以更好的完善自己的程序,提高运行速度。比如我们判断一个数n是不是偶数我们一般使用求余算法n%2是否=0,使用位运算我们可以写成n&1,如果n&1=0那么n是偶数,如果n&1=1则n为奇数。我们知道计算机内部都是进行二进制的计算,计算其他进制数时计算机需要将其转化为二进制在进行计算,而位运算即是二进制的运算,相对其他进制的运算计算速度会更快,所以不要错过位运算的妙处。
目录
🌟认识原码、反码、补码
💫1.对于正数
原码=反码=补码
----------------------------
如6对应的二进制为:110
110的原码:110
110的补码:110
110的反码:110
计算机中一个字节有八位二进制,对于一个字节八位二进制数,6的二进制一个字节(八位)完整表示为00000110,6的二进制二个字节(16位)完整表示为0000000000000110,以此类推。这里因为6为正数所以略写为110
💫2.对于负数
原码=原码
反码:符号位(二进制最左一位)不变,其他位取反
补码:反码+1
对于符号位,0代表正数,1代表负数
-------------------------------------------
如-6对应的二进制为:10000110(1为符号位,表示负数)
10000110的原码:10000110
10000110的反码:11111001
10000110的补码:11111001 + 1=11111010
💫3.负数原码转补码的规则
原码=补码符号位不变,其他位取反后+1
---------------------------------------
例如如-6对应的二进制为:10000110(1为符号位,表示负数)
10000110的补码:11111010
11111001符号位不变取反:10000101
+1:10000110
🌟认识位运算符
我们先来认识位运算符
位运算符 | 运算符名称 | 书写格式 | 举例 |
& | 按位与 | a&b | 2&3=2,3&2=2 |
| | 按位或 | a|b | 2|3=3, 3|2=3 |
^ | 按位异或 | a^b | 2^3=1,3^2=1 |
~ | 按位取反 | ~a | ~2=-3, ~3=-4 |
<< | 按位左移 | a<<b | 2<<3=16, 3<<2=12 |
>> | 按位右移 | a>>b | 2>>3=0, 3>>2=0 |
注:表格举例一栏均为十进制位运算
位运算是对二进制进行运算,计算其他进制数时先将其转化为二进制,运算完成后转化为十进制输出
🌟了解位运算
⭐按位与:&
二进制按位与&的运算规则:
----------------------------------------------
- 0&0=0,0&1=0,1&0=0
- 1&1=1
-----------------------------------------------
举例(十进制)6&4
6对应的二进制为:110
4对应的二进制为:100
✨模拟按位与运算
🌈 按位与运算巧计:有0则0
即0&n=0,其他都为1。n对于二进制十进制都适用
⭐按位或:|
二进制按位或|的运算规则:
----------------------------------------------
- 0|0=0,0|1=1,1|0=1
- 1|1=1
-----------------------------------------------
举例(十进制)6|4
6对应的二进制为:110
4对应的二进制为:100
✨模拟按位或运算
🌈 按位与运算巧计:有1则1
即1&n=1,(n为0或1),其他都位0
⭐按位异或:^
二进制按位异或^的运算规则:
----------------------------------------------
- 0^0=0,0^1=1,1^0=1
- 1^1=0
-----------------------------------------------
举例(十进制)6^4
6对应的二进制为:110
4对应的二进制为:100
✨模拟按位异或运算
🌈 按位疑惑运算巧计:相同为0,不同为1
即0^1=1, 1^0=1. 0^0=0, 1^1=0
⭐按位取反:~
二进制按位取反~的运算规则:
----------------------------------------------
- ~0=-1
- ~1=-2
-----------------------------------------------
举例(十进制)~5
5对应的二进制为:00000101
✨模拟按位取反运算
~5=00000101取反:11111010(得反码,最左一位为1,表示负数)
为了得到结果也就是原码我们按照负数情况转换成原码
11111010符号位不变取反:10000101
+1:10000101 + 1= 10000110(=-6)
⭐按位左移:<<
二进制按位左移<<的运算规则:
----------------------------------------------
- 左移相当于最右位补0
- 左移结果公式a<<b =
-----------------------------------------------
✨模拟按位左移运算
举例(十进制)6<<2
6对应的二进制为:110
110左移(最右补2个0):11000(24=十进制)
由公式 =24
如果补的0使得对应2进制超过一个字节八位数怎么办?
我们“补字节”照样按照二进制左移进行计算
如6<<6
110左移6位后:110 000 000(=384十进制)
⭐按位右移:>>
二进制按位右移>>的运算规则:
----------------------------------------------
- 右移相当于将整体右移
- 右移结果公式a>>b =
-----------------------------------------------
✨模拟按位右移运算
举例(十进制)6>>2
6对应的二进制为:110
110右移(整体右移2位):001(24=十进制)
如果整体右移超过最大右移位数怎么办?
如果整体右移超过最大右移位数那么结果等于零
如6>>3
110右移(整体右移3位):000(0=十进制)
可以理解为右移时右边界无法移动,移动时越过右边界时则将其去除,右移左边空出的位置由0代替。
对此原码、反码、补码和位运算的介绍完毕。
今天就到这,明天见。🚀
❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄end❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄