六种位运算符的介绍与常用操作

本文介绍位运算符的妙用
提示:最右为位为第 0 位
位运算符与加减速度相当,比乘除速度快很多


前言

在日常使用中,位运算符可以带来很大的便捷,提供巧妙的运算。
位运算符分为以下六种:&(按位与)


一、& 按位与

1.1介绍 &

按位与是对二进制数进行操作。
若写法如下:

n = a & b;

则是将二进制数 a 与二进制数b的各位进行运算,若存在同为 1 的位,则记录那个位为 1 。若存在两个数同位有一个存在 0 的情况,则该位记录为 0 。
(以下是二进制写法)
例如:
有二进制数 a 与 b
a= 0000 0000 0000 0000 0000 0000 0001 1011
b= 0000 0000 0000 0000 0000 0000 0011 1000
则有
n= 0000 0000 0000 0000 0000 0000 0001 1000
可以理解为:对每一位都做一次询问,问是否都为 1 ,如果是则返回为真(1),反之返回为假(0)

1.2 & 的常用技巧

按位与(&)大致用途有下列两种:

A、取二进制数的某一位
取某一位即判断该位是否为 1 ;
如判断第七位:

if((n&0x80==0x80)
return true;

B、某些位清零,其他位不变
如下操作:

n=n&0xffffff00;

可以将某数 n 的后两位设置成0。


二、| 按位或

2.1 介绍 |

在两个数同位任意存在1 的时候便判断为 1 。用法如下写法:

n = a | b;

(以下为二进制写法)
若有
a=0000 0000 0001 0001
b=0000 0001 0001 0000

n=0000 0001 0001 0001
可以理解为:对每一位都做一次询问,问是否存在 1 ,若回答是,则返回为真(1),反之则返回为假(0)

2.2 | 的常用技巧

A、某些位变成 1 ,其它位保持不变

n = n | 0xff;

如上便是将低八位都设置成 1 。

n = n | 0x80;

如上便是将第七位设置成 1 ,其它位保持不变。


3 ^ 按位异或

3.1 介绍 ^

两个数只有在同位相同(同为 1 或者 0 )的情况下,该位判断为 0 ,否则为 1。写法如下:

n = a ^ b;

(以下是二进制写法)
若有
a=0000 0000 1100 1111
b=0110 0100 0011 1000
则有
n=0110 0100 1111 0111

可以理解为:对每一位都做一次询问,问是否不同,如果回答是,那么则返回为真(1),反之则返回为假(0)

3.2 ^ 的常用技巧

A、对某一位取反
例如:
想要对第 7 位取反,则有

n = n ^ 0x80

将低八位全部取反

n = n ^ 0xff;

想要将哪一位取反,则将哪一位设置为 1 ,其他位数为 0 。

B、交换两个数的值
写法如下:

a = a ^ b;
b = a ^ b;
a = a ^ b;

4 ~ 按位非

按位非是将二进制数各位全部取反,是一个单目运算符。
写法如下:

a = ~a;

二进制数在内存中以补码的形式存储。

按位取反:二进制每一位取反,0变1,1变0。

~9的计算步骤:

转二进制:0 1001

计算补码:0 1001

按位取反:1 0110

转为原码:

按位取反:1 1001

末位加一:1 1010

符号位为1是负数,即-10


5 << 左移运算符

左移运算符可以完成数对 2^n 的乘除运算,效率很高,比乘与除快很多。
它是对一个二进制数进行向左移位操作,多余位数补上 0 。
例如:
a = 0100
a<<=1;(左移一位,写法等同于 a=a<<1)
a = 1000
左移多少位即乘上 2 的多少次方。
比如左移 3 位就是乘上 2 的 3 次。


6 >> 右移运算符

右移运算符类似于左移运算符,但是它对最高位的处理基本有一下规定:
最高位如果原来为 1 ,那么右移之后也为 1 ,反之则为 0 。
例如:
-25 >> 4 = -2
-4 >> 2 = -1
-4 >> 4 = -1
10 >> 3 = 1

命右移数为 n ,那么则除以 2^n ,如果有小数,则向更小数取整。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

子非_s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值