这个小妖精,怎么说呢?神奇的很,想到了觉得简单,想不到直呼精妙。特别是看别人位运算用得特别溜的时候,心中总是不是滋味儿,入门级别的东西,差距也可以这么大哈。
">>"右移
“<<"左移
"|"或
"&"且
”^"异或
咦(・∀・(・∀・(・∀・*)不会吧不会吧,不会有人这也不会吧。
正片开始!
答应我,每一个问题先自己想然后再看答案,因为这是基本功
-
去掉最后一位
x>>1 -
最后一位取反
x^1 -
在最后位添一个0
x<<1 -
在最后位添一个1
(x<<1)+1 -
把右数第k位变成1
x|(1<<(k-1))
注意是(k-1)噢!因为1<<1就是10辣
- 把右数第k位变成0
x&(~ 1<<(k-1))
啊这,取反操作也太机智了吧!
-
把右数第k位取反
x^(1<<(k-1)) -
最后一位变成1
x|1 -
最后一位变成0
x&0吗?错!这样x就会变成0。正解是:x右移一位然后再左移一位,或者用上面的方法,把最后一位先变成1,然后-1
即(x|1)-1 -
取末k位
x&(2^k-1)或者x&((1<<k)-1) 即用k个1拷贝 -
取右数第k位
(x&(1<<(k-1)))>>(k-1)或者直接把x毁掉(x>>(k-1))&1 -
把末k位变成1
x|((1<<k)-1) 即或上k个1 -
末k位取反
x^((1<<k)-1) -
把右边连续的1变成0
x&(x+1) -
把右起第一个0变成1
x|(x+1) -
把右边连续的0变成1
x|(x-1) -
取右边连续的1
(x^(x+1))>>1 -
去掉右起第一个1的左边
x&(-x)
这个也很妙!-x就是x取反之后+1,后面的100…0不会变,前面全部反掉之后取&变成0
建议不定期复习,保持数感~
晚安~又不受控制地说了一些孩子气地置气话。
看到小孩子装逼真的受不了,这个行业也算年龄敏感吧,还是提高自己的核心竞争力避免被取代吧,再也不是小孩子了,不能像以前一样干不赢我就不玩了,这个世界残酷得真实,谁会管你什么心情?硬着头皮上,去争取,去竞争,去拼搏,雨巨说了,害怕你就输了。他们确实有初生牛犊不怕虎的猛劲,天不怕地不怕什么都敢说,什么都敢问,就是要学习这种精神呀!wyy你在想什么(⊙﹏⊙)!