位運算可以實現哪些功能
位運算可以實現哪些功能
許多時候,我們為了減少演算法的時間複雜度,都是推薦使用位運算,今天我們整理一下位運算可以實現哪些功能。
1. 乘除2
左移1位乘以2,左移n位乘以2^n;
右移1位除以2,右移n位除以2^n;
舉個例子:
#include<iostream>
using namespace std;
int main()
{
int a = 16;
int b = 25;
//乘除2
cout<<(b<<1)<<' '<<(a>>1)<<endl;
return 0;
}
2. 判斷奇偶數
用到位運算中的按位與,和1按位與。
如下:
#include<iostream>
using namespace std;
int main()
{
int a = 16;
int b = 25;
// 判斷奇偶數
if(a & 1)
cout<<"Odd"<<endl;
else
cout<<"Even"<<endl;
return 0;
}
3. 取餘運算
還是使用按位與運算子,只不過不再是和1按位與了。
#include<iostream>
using namespace std;
int main()
{
int a = 16;
int b = 25;
// 取餘
cout<<(a & 3)<<endl; // 除以4的餘數
cout<<(a & 7)<<endl; // 除以8的餘數
cout<<(a & 8)<<endl; // 無效,只能運算2的次冪的餘數
return 0;
}
分析:注意這個方法只能計算2的次冪的餘數,而且參加按位與的只能是2^n-1,因為這些數的二進位制形式全是1.
4. 求相反數
使用按位取反運算子。
//求相反數
cout<<(~a+1)<<endl;
5. 求絕對值
使用異或運算子(^)
#include<iostream>
using namespace std;
int main()
{
int a = -36;
int b = 25;
// 絕對值
int tmp = a>>31; // /a大於等於0時tmp為0,a小於0時tmp為-1
int A = (a^tmp)-tmp;
cout<<A<<endl;
return 0;
}
這些基本的數學運算都是可以通過為運算子來實現,時間複雜度都比較低,以後常用。
相關文章
- 位運算與SQL實現SQL
- 位運算實現加減乘除
- 動態地址可以實現哪些功能及用途
- 2,javase程式碼實戰-運算子——位運算實現加密解密 (一)Java加密解密
- 二進位制、位運算、位移運算
- (位運算)兩個字串的位運算字串
- 位運算
- 【雲端計算】從事雲端計算運維可以考取哪些證書?運維
- 集合-運算實現
- 實用的位運算應用
- 如何用位運算實現整數的加減法
- 理解位運算
- SQL位運算SQL
- 使用位運算進行加法運算
- 位運算實現整數與位元組陣列轉換陣列
- 二進位制數的運算原理與閘電路實現
- 學習位運算
- PHP 位運算使用PHP
- 位運算進階
- 位運算總結
- 巧用JS位運算JS
- 位運算-異或(^)
- android位運算講解與實戰Android
- java二進位制運算十進位制(精確運算)Java
- 四則運算實現 (轉)
- 運算整數C/C++位運算技巧C++
- 計算機基礎:位運算計算機
- 什麼是企業文件管理系統,文件管理系統可以實現哪些功能?
- javascript怎麼實現算術加法運算JavaScript
- JS中的位運算JS
- 位運算簡單操作
- Java位運算小節Java
- Java中的位運算Java
- 位運算的應用
- ~ 按位取反運算解析
- iOS 開發 – 位運算iOS
- 位運算子的計算
- C語言位運算C語言