首页 > 其他分享 >一文搞定>>、<<、>>>等位运算

一文搞定>>、<<、>>>等位运算

时间:2023-09-08 12:11:35浏览次数:39  
标签:搞定 一文 16 二进制 取反 -- 等位 69 运算

位运算在我们平时开发中很少会用到,以至于它被大多数人所忽略,因此在面试题中能频繁的看到位运算的身影。

由于位运算本质是二进制运算,大多数开发者可能会对此比较陌生,本文旨在揭开位运算的神秘面纱,一同探究其本质,帮助大家掌握位运算的方法。

位运算包括以下几类:

运算符 运算 规则 范例
<< 左移 空位补0,被移除的高位丢弃,空缺位补0。 3 << 2 = 12 --> 3*2*2 = 12
>> 右移

被移位的二进制最高位是0,右移后,空缺位补0;

最高位是1,空缺位补1。

3 >> 1 = 1 --> 3/2 = 1
>>> 无符号右移 被移位二进制最高位无论是0或者是1,空缺位都用0补。 3 >>> 1 = 1 --> 3/2 = 1
& 与运算 二进制位进行&运算,只有1&1时结果是1,否则是0。 6 & 3=2
|

或运算

二进制位进行|运算,只有0|0时结果是0,否则是1。 6 | 3 = 7
^ 异或运算

相同二进制位进行^运算,结果是0; 1^1 = 0,0^0 = 0

不相同二进制位^运算结果是1。1^0 = 1,0^1 = 1

6^3 = 5
~ 取反运算

正数取反,各二进制码按补码各位取反

负数取反,各二进制码按补码各位取反

~6 = -7

 

注意:运算符的运算过程都是基于二进制的补码运算,需预先了解二进制(原码、补码、反码)相关知识。

1.左移:<<

运算规则:在一定范围内,数据每向左移动一位,相当于原数据*2。(正数、负数都适用)

【注意】当左移的位数n超过该数据类型的总位数时,相当于左移(n-总位数)位,例:3 << 34 = 12,由于3的二进制总位数32,左移34相当于 3 << (34 - 32) --> 3 << 2 = 12。

3 << 4 -->  3*2的4次幂 => 3*16 => 48

二进制运算:

 

-3 << 4  -->  -3*2的4次幂 => -3*16 => -48

二进制运算:

 

2.右移:>>

运算规则:在一定范围内,数据每向右移动一位,相当于原数据/2。(正数、负数都适用)

【注意】如果不能整除,向下取整。例:3.2 >> 1 = 1

69 >> 4  -->  69/2的4次 = 69/16 =4

二进制运算:

69 >> 4  -->  -69/2的4次 = -69/16 = -5

二进制运算:

 

3.无符号右移:>>>

运算规则:往右移动后,左边空出来的位直接补0。(正数、负数都适用)

69 >>> 4  --> 69/2的4次 = 69/16 =4

二进制运算:

 

-69 >>> 4   结果:268435451

二进制运算:

 

4.按位与:&

运算规则:对应位都是1才为1,否则为0。

1 & 1 = 1;
1 & 0 = 0;
0 & 1 = 0;
0 & 0 = 0;
9 & 7 = 1;
-9 & 7 = 7;

二进制运算:

 

 

5.按位或:|

运算规则:对应位只要有1即为1,否则为0。

1 | 1 = 1;
1 | 0 = 1;
0 | 1 = 1;
0 | 0 = 0;
9 | 7 = 15;
-9 | 7 = -9;

二进制运算:

 

 

6.按位异或:^

运算规则:对应位一个为1一个为0,才为1,否则为0。

1 ^ 1 = 0;
1 ^ 0 = 1;
0 ^ 1 = 1;
0 ^ 0 = 0;
9 ^ 7 = 14;
-9 ^ 7 = -16;

二进制运算:

 

 

7.按位取反:~

运算规则:对应位为1,则结果为0;对应位为0,则结果为1。

~0 = 1;
~1 = 0;
~9 = -10;
~-9 = 8;

二进制计算:

 

 

 总结:位运算的核心是二进制运算,掌握以上7种运算方法,位运算将变得不再困难!

 

脚踏实地行,海阔天空飞~

 

标签:搞定,一文,16,二进制,取反,--,等位,69,运算
From: https://www.cnblogs.com/coder--wang/p/17687125.html

相关文章

  • 【技巧分享】如何获取子窗体选择了多少记录数?一招搞定!
    Hi,大家好久不见。我这个更新速度是不是太慢了呀,因为,最近又又又在忙,请大家谅解啦。现在更新文章、视频都要花好久去考虑,好不容易有个灵感了,一搜索,结果发现之前都已经分享过了(委屈脸)。那今天,给大家分享一个子窗体相应的示例。我们来看操作吧。01、创建窗体还是一样,我们先来创建几......
  • 实现Map批量赋值,我只需24秒搞定!
    函数的功能是将一组键值对批量赋值给Map中的键。在Java中,通常使用Map的put方法逐个将键值对赋值给Map,但在某些场景下,可能需要一次性将多个键值对赋值给Map。函数功能:Map批量赋值参数1:参数名称:target;参数类型:Map;参数描述:Map对象参数2:参数名称:keyAndValue;参数类型:Object;参数描述:k......
  • 一文搞定,PO设计模式详解
    PO模式:全称:pageobjece,分层机制,让不同层去做不同类型的事情,让代码结构清晰,增加复⽤性。PO模式的优势:1)效率⾼:同理,PO模式的逻辑层⽅法有具体定义,情况和元素发⽣变化⼀样修改逻辑层,业务层不变。这样看来结构简单清晰,舒服更符合⼈类习惯,普通⽅式就是继续堆case。2)复⽤多收益⼤:同样......
  • 【文件转存】百度网盘文件转存到夸克网盘【一步搞定】【一眼就会系列】【已实践已完成
     查了一堆网上没有一个靠谱的,没有一个能一下讲解清楚的(说一堆没重点哎)。言归正传:为啥要备份?大家都知道东西不能放一个篮子。重大项目都有备用方案。还是自己搞吧。我找到了一个非常简单的办法,一步就能搞定,非常简单请看:   登录PC端百度网盘和夸克网盘,......
  • 一键搞定WebAPI调试:推荐这款高效工具
    前后端分离前后端分离的起因为什么要有前后端分离呢?我们回想一下以前的开发是怎么开发的,在以前的时候,前端业务还没那么复杂,所以基本都是一个人包揽前后端,也就是全栈,而为了方便开发,就把前后端放在一个项目中去开发这对于一个人开发来说是确实挺方便,但是随着互联网飞速发展,前端业务......
  • 一文讲懂什么是vlan、三层交换机、网关、DNS、子网掩码、MAC地址
    大家好,我的网工朋友俱乐部公众号和网工交流群建立这么久了,不断的有朋友在后台、群里问到什么是网关、dns、子网掩码……以及三层交换机等用途。这些都是网络的基础,不学扎实了,确实也没办法进阶。本期文章就再给你详细地、通俗地给你一次性说清楚今日文章阅读福利:《全国网工交流群进......
  • 一文教会你连接水晶头
    上文咱们提到网线完全可以自己制作,现在咱们就详细说说,网线压制水晶头的方法:首先第一步,用网线钳的剥线口,卡住网线轻轻旋转,剥除网线外皮。                                           这......
  • 国内免费试用ChatGPT,三步搞定
    一、更改edge配置,将它改为已启用。配置地址:edge://flags/#extensions-on-edge-urls 二、下载压缩包,将解压文件直接拖进,然后打开。插件包地址:https://pan.baidu.com/s/1sYbN2sBzVMc3N_hqsAa_DQ?pwd=cfqw 三、登录账号即可使用 ......
  • 一文了解Validator库
    1.引言github.com/go-playground/validator是一个Go语言的库,用于对结构体字段进行验证。它提供了一种简单而灵活的方式来定义验证规则,并在验证过程中检查结构体字段是否满足这些规则。这个库可以用于验证各种数据,包括从用户输入到API请求中的数据,以确保数据的完整性和有效性......
  • 一文了解Validator库
    1.引言github.com/go-playground/validator是一个Go语言的库,用于对结构体字段进行验证。它提供了一种简单而灵活的方式来定义验证规则,并在验证过程中检查结构体字段是否满足这些规则。这个库可以用于验证各种数据,包括从用户输入到API请求中的数据,以确保数据的完整性和有效......