位運算以及邏輯短路

2021-09-09 06:31:12 字數 1229 閱讀 3590

<<  >>

左移變小,右移變大,且移動1整個數值變化的倍數是2倍。 

比如:(12<<2)=24

(12>>2)=6

這裡n取值為5,k取值為2(k代表的是位的下標,下標從0開始).且以乙個位元組長8位作為解釋。

解釋:

n:0000 0101

n>>2: 0000 0001

1:0000 0001

(n>>2)&1: 0000 0001

思路:只要思想是構造,然後用&來操作。即構造乙個位元組8位只有連續的0和1(此題就是1).然後,當任何乙個二進位制 和這個數

進行按位與運算,就會結合數值是1的0位和數值是n的其他位。

思路:思想還是和上面的一樣,就是構造乙個位元組8位,特徵是只有連續的0和1.當n和這個位元組做按位與運算的時候,結果就是

結合了這個位元組的0位和n的其他位。那麼特徵位元組怎麼構造,一般的構造這種特徵位元組一定需要移動,但是只移動不能構成連續

,所以中間結果減一,就可以得到連續的0,1組合。

總結:

按位與的利用,做了特殊處理,就像以上的做法可以得到驚人的效果。按位與最終的結果是乙個組合,即0000...和其他有用的位

就是要得到的位。

異或,按位取反

異或的意思就是按位運算時,同號的正(二進位制表示0為正,反之1為負),異號的負。

按位取反,就是0得1,1得0。

這就有了原碼,反碼,和補碼的區別:

原碼到反碼:除了符號位不變,數值位按位取反,

原碼到補碼:除了符號位不變,數值位取反加1,。

反碼到原碼:(反碼的反碼)除了符號位不變,數值位按位取反。

補碼到原碼:(補碼的補碼)除了符號位不變,數值位取反加1,。

邏輯短路

a&&b:當a為假的時候,結果就是假的,就不會再看b,只有結果是真的時候,才會看b的結果。而且取決於b

即,if(a)   b

a||b:當a為真的時候,結果就是真的,就不會再看b,只有結果是假的時候,才會看a的結果。而且取決於b

即   if(!a) b

所以,利用好邏輯運算的短路情況,就能提高程式設計的效率。

短路運算(邏輯中斷)

邏輯運算中,一般是用布林值參與邏輯運算。比如 true flase flase 但如果是 值 或者是 表示式 參與邏輯運算呢?比如 123 456 這是就是短路運算 邏輯中斷 原理 當有多個表示式 值 時,左邊的表示式值可以確定結果時,就不再繼續運算右邊的表示式的值。表示式1 表示式2 如果表示式1...

邏輯位運算與邏輯運算

兩者非常容易混淆,其實這是截然不同的兩種運算.1.邏輯位運算 與運算 1 2 0 0000 0001 0000 0010 0000 0000 0 或運算 1 2 3 0000 0001 0000 0010 0000 0011 3 按位求反 運算,異或 運算略.移位 左移,右移 運算略.2.邏輯運算 ...

邏輯與或( ),短路與或( )及位運算

做了leecode一道簡單題,計算漢明距離 想到位運算不要太簡單 python一行出答案 問題是沒想到 補課開始 一 題目介紹 二 手算思路 三 位運算求解 四 位與或,邏輯與或 兩個整數之間的漢明距離指的是這兩個數字對應二進位制位不同的位置的數目。給出兩個整數 x 和 y,計算它們之間的漢明距離。...