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

位运算符&移位运算符

作者头像
roobtyan
发布2019-02-21 15:48:40
1.7K0
发布2019-02-21 15:48:40
举报

位运算符

按位操作符用来操作整数基本数据类型中的单个比特(bit),就是二进制,按位操作符会对两个参数中对应的位(bit)执行布尔运算,最终生成一个结果。下面我们来看一下都有哪些位运算符。

这里写图片描述
这里写图片描述

ok,有人看了之后可能会问,与、或、异或这三个符号不是逻辑运算符吗,怎么又成了位运算符? 其实,我们知道,任何信息在计算机中都是以二进制的形式保存的,既然它们可以对布尔值进行运算,那么”&”、“|”、“^”除了可以作为逻辑运算符就也可以作为位运算符了。位运算是直接对二进制进行运算。他们对两个操作数中的每一个二进制位都进行运算。 首先,我们先将规律罗列出来:

可以把1当做true 0当做false
只有参与运算的两位都为1,&运算的结果才为1,否则就为0。 
只有参加运算的两位都是0,| 运算的结果才是0,否则都是1。
只有参加运算的两位不同,^ 运算的结果才为1,否则就为0。

单单这么看,大家可能还不知道怎么回事,我们来举几个例子。 1.& 与运算

这里写图片描述
这里写图片描述

这样是不是就很清晰了呢?

2.| 或运算

这里写图片描述
这里写图片描述

3.^ 异或运算

这里写图片描述
这里写图片描述

4.取反操作 其实,表面上看起来,取反操作是一个比较难理解的操作。但实际上,取反操作还是相对简单的。 我们有一个清晰的思路,那就是将一个十进制数表示为二进制数,然后对其取反,也就是将二进制数的1变成0,0变成1。 但是,我们面对这个问题,出现的情况是多种的,这个思路还不足以满足要求,让我们来看看具体的操作流程。 流程如下:

1.先将这个数的原码写出来,如果是正数,则二进制数最高位写0,负数则是1
2.求出这个二进制数的补码,正数的补码是其本身,负数的补码计算方法是:最高位数值不变,其余位求反,再按照正常的加法操作加1。
3.对补码进行求反
4.求反后的补码按照正常的减法操作减1(注意二进制是满二进一)
5.对除去当前二进制数最高位的其余位数进行求反
6.求出最终的值,最高位代表的是当前数字的正(0)负(1)号

这个操作方法亲测可用,这只是其中的一个方法,大家可以搜索一下其他的方法。

移位操作符

<< 左移、>> 右移、>>> 无符号右移 移位操作符有如上几种。 对于这部分,我不做过多的解释,用几个图来表示一下就可以了。

1.<<左移 栗子:6<<2

这里写图片描述
这里写图片描述

也就是说,左移符号左边是操作数,右边是移动的位数,左移动的两位数丢弃,空余出来的右侧用0来补充,所以,左移位数越多,数字是越大的。

2.>>右移 栗子:6>>2

这里写图片描述
这里写图片描述

右移操作符有两种情况,当操作数的最高位是1时,空余位补1,是0时补0。

3.>>>无符号右移 无符号右移的情况和右移类似,只是,这种移动方法,无论操作数二进制数最高位是0还是1,空余位都补0。

结语

感谢您的阅读,欢迎指正博客中存在的问题,也可以跟我联系,一起进步,一起交流!

微信公众号:进击的程序狗 邮箱:roobtyan@aliyun.com 个人博客:https://roobtyan.github.io

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年09月16日,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 位运算符
  • 移位操作符
  • 结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档