前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >强大的位运算

强大的位运算

作者头像
YingJoy_
发布2018-04-17 15:26:00
6510
发布2018-04-17 15:26:00
举报
文章被收录于专栏:应兆康的专栏应兆康的专栏

什么是位运算?

程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作。比如,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算。举个例子,6的二进制是110,11的二进制是1011,那么6 and 11的结果就是2,它是二进制对应位进行逻辑运算的结果(0表示False,1表示True,空位都当0处理)。

《强大的位运算》
《强大的位运算》

奇偶校验:

num&1 奇数返回1 偶数返回0 0 返回0

绝对值

~num + 1

乘 2, 4, 8, 16, 32

<< 1, 2, 3, 4, 5

除 2, 4, 8, 16, 32

>> 1, 2, 3, 4, 5

交换两数值,不引入中间变量:

a = a^b b = b^a a = a^b

判断是否位2的幂次

思路解析:N如果是2的幂次,则N满足两个条件。 1.N>0 2.N的二进制表示中只有一个1 一位N的二进制表示中只有一个1,所以使用N&(N-1)将唯一的一个1消去。 如果N是2的幂次,那么N&(N-1)得到结果为0,即可判断。 def is_pow2(num): return (n & (n-1) == 0)

消除x的最后一位的1

x & (x-1) 如: x = 1100 x-1 = 1011 x&(x-1) = 1000

C语言运算符优先级口诀:“单算移关与,异或逻条赋”。 * “单”表示单目运算符:逻辑非(!),按位取反(~),自增(++),自减(–),取地址(&),取值(*); * “算”表示算术运算符:乘、除和求余(*,/,%)级别高于加减(+,-); * “移”表示按位左移(<<)和位右移(>>) * “关”表示关系运算符:大小关系(>,>=,<,<=)级别高于相等不相等关系(==,!=); * “与”表示按位与(&); * “异”表示按位异或(^); * “或”表示按位或(|); * “逻”表示逻辑运算符:逻辑与(&&)级别高于逻辑或(||); * “条”表示条件运算符(? :); * “赋”表示赋值运算符(=,+=,-=,*=,/=,%=,>>=,<<=,&=,^=,|=,!=); * 逗号运算符(,) 级别最低

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是位运算?
  • 奇偶校验:
  • 绝对值
  • 乘 2, 4, 8, 16, 32
  • 除 2, 4, 8, 16, 32
  • 交换两数值,不引入中间变量:
  • 判断是否位2的幂次
  • 消除x的最后一位的1
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档