目錄
基本知識
四個妙用
1.判斷整型變數奇偶 原理
**2.交換變數 原理
**3.乘/除2的n次 原理
**4.取餘 原理
**5.得到整型變數二進位制形式某位置的值 原理
**全部**
實驗結果截圖
我們常用十進位制,計算機內部儲存的是二進位制,用位運算會快一點。在需要大量運算是,位運算能節省時間,提高oj的通過率。
使用位運算子:&
2的0次是1,2的1次是2。根據按權展開可知,只需判斷最後一位即可。1的二進位制是000...001。根據&運算子的特點,奇數末位是1,和1與為1,偶數則為0。
//判斷int型別變數奇偶
bool judge(int n)
使用位運算子:^
兩個數相同,則返回0,否則,返回1。a=a^b;b=(a^b)^b=a;a=(a^b)^a=b;
//交換變數 利用異或
void change()
使用位運算子:《和》 乘用的比較多
移位。不溢位的情況下,左移補0,就是乘2了。除是右移,類似,但是可能損失精度。
//num乘2的n次
int multi(int num, int n)
//num除2的n次
int devide(int num, int n)
使用位運算子:&
例如,15對8取餘,15的二進位制是00...01111 最多就是餘7嘍。8-1就是7,二進位制為00...111,和00...0111相與就是餘數7。
//得到餘數
int yu(int num,int n)
向右移位與1進行「&」操作,可以用來得到二進位制。位置4
3210
整數(十進位制)
20二進位制10100
//取十進位制整型變數a的二進位制形式的第k位
int getwei(int n, int k)
/*
project: bitwise_useful(位運算的妙用)
date: 2019/03/01
author: frank yu
*/#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;
#define f(i,m,n) for(int i=m;i> k & 1;
return m;
}//num乘2的n次
int multi(int num, int n)
//num除2的n次
int devide(int num, int n)
//得到餘數
int yu(int num, int n)
//****************************功能實現函式*********************************//
//選單
void menu()
//判斷奇偶
void oddoreven()
//交換變數 利用異或
void change()
//乘或除2的次
void mulorde()
//取餘 a%b b為2的多少次時可以
void quyu()
//得到第k位
void wei()
//主函式
更多資料結構與演算法實現:資料結構(嚴蔚敏版)與演算法的實現(含全部**)
程式中位運算的妙用
程式中的所有數在計算機記憶體中都是以二進位制的形式儲存的。位運算說穿了,就是直接對整數在記憶體中的二進位制位運算。比如,and運算本來是乙個邏輯運算子,但整數與整數之間也可以進行and運算。舉個例子,6的二進位制110,11的二進位制是1011,那麼6 and 11的結果就是2 0010 它是二進位...
位運算的妙用
位運算的操作 負數是按照補碼的形式參與按位與運算的 原碼就是符號位加上真值的絕對值,即用第一位表示符號,其餘位表示值.1為正,0為負 反碼的表示方法是 正數的反碼是其本身 負數的反碼是在其原碼的基礎上,符號位不變,其餘各個位取反.補碼的表示方法是 正數的補碼就是其本身 負數的補碼是在其原碼的基礎上,...
位運算的妙用
做題中常用的位運算有以下幾種 判斷奇偶性 if n 1 else 常用於快速冪和其他判斷奇偶性的地方 乘除2的整次冪 scanf d d n,m 輸出n乘2的m次方 printf d n m 線段樹求左兒子可以用 id 1得到,乙個偶數n 加1可以寫做n 1,如求左兒子可以用 id 1 1得到。sc...