
位运算
程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作。比如,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算。举个例子,6的二进制是110,11的二进制是1011,那么6 and 11的结果就是2,它是二进制对应位进行逻辑运算的结果(0表示False,1表示True,空位都当0处理)。
and和&
and 运算通常用于二进制的取位操作.
相同位的数字都为1, 则为1; 若有一个不为1, 则为0.
举例:
位运算: 6&11
0110
1011
-----
0010-> 位运算结果为: 2
小技巧
判断一个整数是奇数还是偶数
and 1 的结果就是取二进制的最末位 (0/偶数 , 1/奇数)
or和 |
or 运算通常用于二进制特定为的无条件赋值.
相同位只要一个为1 即为1.
举例:
or位运算: 6 or 11
0110
1011
----
1111-> 位运算结果为: 15
小技巧
强行把一个数变成最接近的偶数
or 1 结果: 肯定是个奇数 , 然后-1. 变成偶数
xor 运算 ^
异或的符号是^。按位异或运算, 对等长二进制模式按位或二进制数的每一位执行逻辑按位异或操作. 操作的结果是如果某位不同则该位为1, 否则该位为0.
相同位不同则为1, 相同则为0
举例:
- 交换律方法可以历史这个^ 运算来实现
这种是利用加法和减法互为逆运算实现
a:=a + b;
b:=a - b;
a:=a - b;
实现a,b两个值交换
a:=a xor b;
b:=a xor b;
a:=a xor b;
... 这里我也看不懂.
not 运算~
not运算的定义是把内存中的0和1全部取反。
shl运算<<
a shl b就表示把a转为二进制后左移b位(在后面添b个0)
计算结果公a<<b =ax2的b次方
shr运算>>
和shl相似,a shr b表示二进制右移b位(去掉末b位),相当于a除以2的b次方(取整)
小技巧: 1. 二分查找
- 堆的插入操作
- 最大公约数的二进制算法用除以2操作来代替慢得出奇的mod运算,效率可以提高60%。
了解简单一点的位运算, 高级的位运算太复杂了 智商下线
评价
排名
25
文章
22
粉丝
5
评论
7
C# string 和String 的区别
剑轩 : 所以区别主要在哪里呢....
markdown 初步学习
剑轩 : 哇哦,真的喜欢你这个个性签名,很不错
pythoic 写法
剑轩 : 新年快乐啊
python拼接字符串八种
剑轩 : 手动点赞+1
python拼接字符串八种
雨雨雨雨雨辰 : 手动点赞
pythoic 写法
瑾语 : 你好
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术