前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深入理解位操作( 一)

深入理解位操作( 一)

作者头像
算法与编程之美
发布2019-07-17 18:03:59
3670
发布2019-07-17 18:03:59
举报

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

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

位操作介绍

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

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 团队


微信号:算法与编程之美

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法与编程之美 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档