专栏首页算法与编程之美深入理解位操作( 一)

深入理解位操作( 一)

欢迎点击「算法与编程之美」↑关注我们!

本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。

位操作介绍

位操作主要有与、或、非和异或,下面将介绍各种位操作的基本用法。

0 & 1 = 0

1 & 0 = 0

0 & 0 = 0

1 & 1 = 1

0 | 1 = 1

1 | 0 = 1

0 | 0 = 0

1 | 1 = 1

!0 = 1

!1 = 0

异或

1 ^ 0 = 1

0 ^ 1 = 1

0 ^ 0 = 0

1 ^ 1 = 0

位操作性质

上面这些知识应该是大家都已经了解的,那么接下来便问大家这些操作到底有什么作用?难道仅仅是为了做一些简单的位运算?

答案显然不是,熟练的运用这些操作,可以为你解决很多复杂的问题。

(1) 与操作其实就是get操作,即获得任意位的值。

给定任意的二进制数01010111,我想获得第4,5,6位的值,该如何操作呢?

0101 0111

& 0011 1000

------------------

0001 0000

(2) 或操作其实就是set操作,即设置任意位的值。

给定任意的二进制数01010111,我想把第4,5,6位设置为1。

0101 0111

| 0011 1000

------------------

0111 1111

(3) 异或操作其实就是取反操作,即把任意位的0变成1,1变成0。

给定任意的二进制数01010111,我想把第4,5,6三位由0变成1,由1变成0。

0101 0111

^ 0011 1000

------------------

0110 1111

思考

从上面可以看到,二进制都是由0和1组成的,因此在编写的时候,01数字较多不细心的话十分容易写错。有没有更加简洁的写法呢?

答案是有的,那就是采用八进制、十进制或十六进制。

八进制 0123 以0开头

十进制 123

十六进制 0x123 以0x开头

给定任意的一个整数1379,要get它的第3,5,8位,应该如何去做呢?

(1) 将一个字节的3、5、8三位设置为1即1001 0100;

(2) 将二进制转换为十六进制即0x54;

(3) 利用熟悉的语言就可以直接编写代码1379 & 0x54进行计算就可以得到结果。

利用十六进制就可以非常方便的编写代码,得到结果。

结语

本文主要介绍了位操作的定义,基本性质和一些基本应用,帮助大家更好的理解二进制。另外为了方便大家更好的记忆,简单归纳总结为如下:

与 = get

或 = set

异或 = 取反

拓展阅读:

深入理解遗传算法(一)

深入理解遗传算法(二)

从1到100求和学算法思维(一)

从1到100求和学算法思维(二)

从1到100求和学算法思维(三)

从1到100求和学算法思维(四)

从1到100求和学算法思维(五)

从1到100求和学算法思维(六)

where2go 团队


微信号:算法与编程之美

温馨提示:点击页面右下角“写留言”发表评论,期待您的参与!期待您的转发!

本文分享自微信公众号 - 算法与编程之美(algo_coding),作者:gongsuochen

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-12

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python|二分查找算法解决包裹最低运载问题

    传送带上的包裹必须在 D 天内从一个港口运送到另一个港口。传送带上的第i个包裹的重量为 weights[i]。每一天,都会按给出重量的顺序往传送带上装载包裹。装...

    算法与编程之美
  • python|python实现汉译英

    首先我们要导入两个库爬虫库(requests)和json库。Requests库就不多讲了,了解爬虫的观众老爷们都懂用于爬取网络数据,Json库再这个程序的主要作...

    算法与编程之美
  • 深入理解遗传算法(三)

    已知N元一次方程y = w1x1 + w2x2 + w3x3 + w4x4 + w5x5 + w6x6

    算法与编程之美
  • Leetcode 171 Excel Sheet Column Number

    Related to question Excel Sheet Column Title Given a column title as appear in...

    triplebee
  • 挖洞经验 | 注册、登录、密码修改页面渗透测试经验小结

    在很多的注册、登录、密码修改等页面都需要用户输入图形验证码,目的是为了防止恶意攻击者进行爆破攻击。

    天钧
  • 初学java之接口基础

    1 /* 2 长城牌电视机 3 联想奔月5008PC机 4 */ 5 6 7 package st; 8 //接口回调实例 9 in...

    Gxjun
  • 实用主义:面试中的日常闭包

    MrTreasure
  • Angular框架里两个模块的互相依赖

    如果把思路放宽一点,把狭义的死锁场景中对资源的并发请求,拓宽到编程中的依赖管理,那么我们可以构造一个循环依赖的场景,即模块A和模块B互相依赖。 可以很容易地用...

    Jerry Wang
  • 房上的猫:StringBuffer类

    一.使用StringBuffer类  StringBuffer类位于java.lang包中,是String类的增强类  步骤:   1.声明StringBuff...

    房上的猫
  • Echarts图表X轴坐标单位显示不全解决办法

    用户4344670

扫码关注云+社区

领取腾讯云代金券