讓人頭大的位運算

2021-09-14 03:58:02 字數 2450 閱讀 7769

1.定義:位運算通常是指對二進位制數的運算。常見的位運算子有

(1)& 按位與      全一則一

(2)| 按位或        有一則一

(3)^按位異或     相同位上不一樣則為1

(4)~取反,將0變成1,將1變成0.

(3)<<  左移  m<<1是將m轉化成2進製數,向左移動一位丟棄高位,低位補零

左移就相當於乘以2的n次方。

eg: 將十進位制3左移4位,則有: 3<<4就等於將0000 0011左移4位。即0011  0000

(4)>> 右 移    m<<1是將m轉化成2進製數    向右移動一位.

右移就相當於除以2的n次方丟棄低位,高位補符號位

對於有符號數時,在右移時,符號位將跟隨移動。當為正數時,最高位補0;當為負數時,符號位補1.

eg:  將15右移兩位,即0000 1111>>2,則有 0000 0011

2.按位運算規則

(1) 將第k位變1:

按位或 1。因為0和任何數字按位或都不變,1和任何數字按位或都為1.

(2)將第k位變成0:

按位與0。因為0和任何數字按位與都變0,1和任何數字按位與都不變

(3)將第k位取反:

按位異或 .因為0和任何數字按位異或都不變,1和任何數字按位異或都取反

總規則:         1.確定符號2.確定數字3.構造數字

3.有關位運算的演算法(一位元組)

1.將ch的 二進位制右數第n位置 1(n從1開始)

int getbits( char *ch,int n)//0101 0010->0101 0110

*ch|=1<

return ture;

}

2.獲取ch的 二進位制右數第n位置 的值(n從1開始)

int getbits( char ch,int n)

return (ch>>(n-1))&1);

}

3.將ch的 二進位制右數第n位清 0(n從1開始)

int getbits( char *ch,int n)

*ch&=~(1<

}

4.位反轉 (按位取反)

unsigned int getbits(unsigned  int n)

}return tmp;

}

讓人頭大的leetcode刷題之旅

水平不高,單純記錄一下leetcode刷題,也督促一下自己。1.兩數之和 一開始刷leetcode,引數都搞不清楚,摸索了好久才知道怎麼寫。這裡函式內部的malloc還需要在外部呼叫後釋放。note the returned array must be malloced,assume caller ...

leetcode之令人頭大的有限狀態自動機

今日打卡一題是leetcode 8.字串轉換整數 atoi 但從題目看來,感覺挺簡單呀,這不就是語言裡面會自帶的atoi函式嗎?跟傳說中編譯原理中的自動機有什麼關係,做題要不要這麼博學。其實由於將字串轉換成整數的時候限制條件有很多個,流程複雜。所以使用有限狀態自動機可以梳理開始和結束,中間各種條件轉...

讓人頭疼的遞迴演算法

遞迴,一般指函式的定義中使用函式自身的方法。也就是說,遞迴演算法是一種直接或者間接呼叫自身函式方法的演算法。實質上是把問題分解成規模縮小的同類問題的子問題,然後遞迴呼叫方法來表示問題的解。基本原理 1.每一級的函式呼叫都有自己的變數。2.每一次函式呼叫都會有一次返回。3.遞迴函式中位於遞迴呼叫前的語...