C语言常用基础位操作
1、使用下面的代碼將最右邊的1改變為0,假如沒有1則結果為0(e.g.,01011000=>01010000):
x &? (x-1)
此代碼可以用來判斷一個無符號的整數是否為2的冪,假如x & (x-1)==1,則x為2的冪,否則x不為2的冪
2、相似地,下面的代碼可以用來判斷一個無符號的整數是否具備2n-1的格式(包括n=0、1)
x & (x+1)
3、下面的代碼將隔離最右邊的1,假如右邊沒有1則結果返回0 (e.g., 01011000 =>00001000):
x & (-x)
4、下面的代碼將隔離最右邊的0,假如右邊沒有0則結果返回0 (e.g., 10100111 =>00001000):
~x & (x+1)
5、下面的代碼都可以用來產生一個掩碼,用來保留尾部的0,假如x=0則返回全1字節 (e.g., 01011000 =>00000111):
~x & (x-1)? 或? ~(x | -x)?? 或? (x & -x)-1
6、下面的代碼用來產生一個掩碼,用來保留最右邊的1與尾部所有的0,假如x=0則返回全1字節(e.g., 01011000 =>00001111):
x ^ (x-1)
7、下面的代碼用來將最右邊的1右邊的0全部改為1,假如x=0則返回全1字節(e.g., 01011000 = >01011111):
x | (x-1)
8、下面的代碼將最右邊的1臨近的1取反 (e.g., 01011000 =>01000000):
((x | (x-1))+1) & x
總結
以上是生活随笔為你收集整理的C语言常用基础位操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Warning: mysqli::__c
- 下一篇: SQL日期函数汇总