一、前言:什么是位运算
现代计算机中所有的数据以二进制的形式存储在设备中。计算机对二进制数据进行的运算(+、-、*、/)都是叫位运算,即符号位共同参与运算的运算。
位运算的运算分量只能是整型或字符型数据
举一个例子来看一下是如何进行计算的,比如这行代码:
int a=30;
int b=42;
int c=a+b;
计算两个数的和,因为在计算机中都是以二进制来进行运算,所以上面我们所给的int变量会在机器内部先转换为二进制在进行相加:
a: 0 0 0 1 1 1 1 0
b: 0 0 1 0 1 0 1 0
___________________
c: 0 1 0 0 1 0 0 0
相比在代码中直接使用(+、-、*、/)运算符,合理运用位运算更能显著提高代码在机器上的执行效率。
二、位运算的概述
按位与运算符(&)
运算规则:两位同时为1,结果才为1,否则结果为0。
0&0=0 0&1=0 1&0=0 1&1=1
按位或运算符(|)
运算规则:全零为零,有一为一
0|0=0 0|1=1 1|0=1 1|1=1
异或运算符(^)
运算规则:相同为零,不同为一
0^0=0 0^1=1 1^0=1 1^1=0
异或的几条性质:
1、交换律
2、结合律 (a^b)^c == a^(b^c)
3、对于任何数x,都有 x^x=0,x^0=x
4、自反性: a^b^b=a^0=a;
取反运算符 (~)
运算规则:参加运算的一个数据,按二进制进行“取反”运算。
~0=1 ~1=0
左移运算符(<<)
运算规则:将一个运算对象的各二进制位全部左移若干位,左边丢弃,右边补零
如:a=1011 0110,a=a<<2,即得1101 1000。
若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。
右移运算符(>>)
运算规则:将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
如:a>>2,如果a为正数,左边补0,如果a为负数,左边补一。(看被移数的正负)
如有疑问可加QQ群讨论:725936761 博主免费答疑
欢迎大家一起讨论进步。后续遇到相似的题会继续更新!
为了鼓励大家坚持,当天打卡人数超过一半,群主发一个红包(群主是学生),激励大家坚持下去!希望以后找工作的时候大家能互捞一下~~~
群里已有字节、滴滴大佬,可帮忙内推!也欢迎其他大厂的工作人士进群!帮忙内推~