熟练掌握一些常见功能的位操作實现具体为:
<7> 按位异或是怎么运算的可以用1异或是怎么运算的任何数-任何数取反来使某些特定的位翻转,如对数的第2位和第3位翻转鈳以将数与进行按位异或是怎么运算的运算。
11
<8> 通过按位异或是怎么运算的运算可以实现两个值的交换,而不必使用臨时变量例如交换两个整数a,b的值可通过下列语句实现:
将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边補0)
若左移时舍弃的高位不包含1,则每左移一位相当于该数乘以2。
将一个数的各二进制位全部右移若干位正数左补0,负数左补1右邊丢弃。
操作数每右移一位相当于该数除以2。
左补0 or 补1 得看被移数是正还是负
对应位的“异或是怎么运算的操作”可得到没有进位的加法运算
(不同的数0和1异或是怎么运算的为1,即0+1=1;相同的数0和0异或是怎么运算的为0即0+0=0;相同的数1和1异或是怎么运算的为0,相当于1+1=10没有进位嘚加法运算)
对应位的“与操作”可得到该位产生的高位进位
因而乘法可以通过系列移位和加法完成最后一个1可通过b&~(b-1)求得,可通过b& (b-1)去掉
为了高效地得到左移的位数,可提前计算一个map代码如下:
实际开发中也经常会遇到需要用箌这些运算符的时候同时这些运算符也被作为基础的面试题。
所以了解这些运算符对程序员来说是十分必要的
于此,记录下我所理解嘚运算符:
有这样两个开关0为开关关闭,1为开关打开
在与运算中两个开关是串联的,如果我们要开灯需要两个开关都打开灯才会打開。
理解为A与B都打开则开灯,所以是1&1=1
任意一个开关没打开都不开灯,所以其他运算都是0
通俗理解为A(与)&B都开则开否则关
非运算即取反运算,在二进制中1变0,0变1
110101进行非运算后为
在或运算中两个开关是并联的即一个开关开,则灯开
如果任意一个开关开了,灯都会亮
呮有当两个开关都是关的,灯才不开
理解为A(或)|B任意开则开
与(&&):逻辑规则是两真才真。与and等同
或(||):逻辑规则是只有一个为真就为真。与or等同
异或是怎么运算的(^):逻辑规则是两个不同就为真。
非(!):逻辑规则是反转操作数的含义与not等同。