c語言位運算的妙用 程式優化

2021-09-11 17:33:28 字數 2110 閱讀 1598

目錄

基本知識

四個妙用

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...