强大的位运算

什么是位运算?

程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作。比如,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语言运算符优先级口诀:“单算移关与,异或逻条赋”。 * “单”表示单目运算符:逻辑非(!),按位取反(~),自增(++),自减(–),取地址(&),取值(*); * “算”表示算术运算符:乘、除和求余(*,/,%)级别高于加减(+,-); * “移”表示按位左移(<<)和位右移(>>) * “关”表示关系运算符:大小关系(>,>=,<,<=)级别高于相等不相等关系(==,!=); * “与”表示按位与(&); * “异”表示按位异或(^); * “或”表示按位或(|); * “逻”表示逻辑运算符:逻辑与(&&)级别高于逻辑或(||); * “条”表示条件运算符(? :); * “赋”表示赋值运算符(=,+=,-=,*=,/=,%=,>>=,<<=,&=,^=,|=,!=); * 逗号运算符(,) 级别最低

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏kevindroid

NDK学习笔记(2)——C与java之间的互相调用

1355
来自专栏吴伟祥

正则表达式30分钟入门教程 转

学习正则表达式的最好方法是从例子开始,理解例子之后再自己对例子进行修改,实验。下面给出了不少简单的例子,并对它们作了详细的说明。

872
来自专栏轮子工厂

不看技术文,还想不想去腾讯了

今天的内容主要是讲解指针数组。这部分内容实际上是要结合数组指针一起讲的,但是由于篇幅的问题,只能拆成两篇来写。今天这篇介绍指针数组,下一篇介绍数组指针。

762
来自专栏C语言及其他语言

[程序源码]C语言实现简单计算器(VC6.0环境)

程序源码 ? 今天给大家带来一个C语言实现简单计算器(VC6.0环境)的程序源码,好了,咱们话不多说,直接上源码—— #include <stdio.h...

1.1K7
来自专栏Python爬虫实战

Python数据类型之元组

元组和列表有一个很重要的区别,那就是元组是不可改变的,定义了元组里面的元素就不能随便改动了。 由于和列表是近亲关系,所以元组和列表在实际使用上是非常相似的。

911
来自专栏跟着阿笨一起玩NET

C# Stream 和 byte[] 之间的转换

1101
来自专栏大前端_Web

jsvascript—谜之this?

版权声明:本文为吴孔云博客原创文章,转载请注明出处并带上链接,谢谢。 https://blog.csdn.net/wkyseo/articl...

1584
来自专栏静默虚空的博客

排序七 归并排序

要点 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 将已有序的子序列合并,得...

1877
来自专栏撸码那些事

C#集合类型大揭秘

集合是.NET FCL(Framework Class Library)的重要组成部分,我们平常撸C#代码时免不了和集合打交道,FCL提供了丰富易用的集合类型,...

2257
来自专栏跟着阿笨一起玩NET

C#序列化反序列化帮助类

3020

扫码关注云+社区

领取腾讯云代金券