不管怎麼記都記不住的位運算

2022-05-24 06:18:12 字數 1536 閱讀 7587

運算符號

運算說明

=== 1. and運算 & ===

and運算通常用於二進位制的取位操作,例如乙個數 and 1的結果就是取二進位制的最末位。這可以用來判斷乙個整數的奇偶,二進位制的最末位為0表示該數為偶數,最末位為1表示該數為奇數。

相同位的兩個數字都為1,則為1;若有乙個不為1,則為0。

(&;或者and)

=== 2. or運算 | ===

or運算通常用於二進位制特定位上的無條件賦值,例如乙個數or 1的結果就是把二進位制最末位強行變成1。如果需要把二進位制最末位變成0,對這個數or 1之後再減一就可以了,其實際意義就是把這個數強行變成最接近的偶數。

相同位只要乙個為1即為1。

(|或者or)

=== 3. xor運算 ^ ===

異或的符號是^。按位異或運算, 對等長二進位制模式按位或二進位制數的每一位執行邏輯按位異或操作. 操作的結果是如果某位不同則該位為1, 否則該位為0.

xor運算的逆運算是它本身,也就是說兩次異或同乙個數最後結果不變,即(a xor b) xor b = a。xor運算可以用於簡單的加密,比如我想對我mm說1314520,但怕別人知道,於是雙方約定拿我的生日19880516作為金鑰。1314520 xor 19880516 = 20665500,我就把20665500告訴mm。mm再次計算20665500 xor 19880516的值,得到1314520。

相同位不同則為1,相同則為0。

(^或者xor)

運算結果

x y

x 執行了第一句後x變成了x # y。那麼第二句實質就是y

=== 4. not運算 ~ ===

not運算的定義是把記憶體中的0和1全部取反。使用not運算時要格外小心,你需要注意整數型別有沒有符號。如果not的物件是無符號整數(不能表示負數),那麼得到的值就是它與該型別上界的差,因為無符號型別的數是用00到$ffff依次表示的。下面的兩個程式(僅語言不同)均返回65435。

如果not的物件是有符號的整數,情況就不一樣了,稍後我們會在「整數型別的儲存」小節中提到。

=== 5. shl運算 << ===

a shl b就表示把a轉為二進位制後左移b位(在後面添b個0)。例如100的二進位制為1100100,而110010000轉成十進位制是400,那麼100 shl 2 = 400。可以看出,a shl b的值實際上就是a乘以2的b次方,因為在二進位制數後添乙個0就相當於該數乘以2。

通常認為a shl 1比a * 2更快,因為前者是更底層一些的操作。因此程式中乘以2的操作請盡量用左移一位來代替。

定義一些常量可能會用到shl運算。你可以方便地用1 shl 16 - 1來表示65535。很多演算法和資料結構要求資料規模必須是2的冪,此時可以用shl來定義max_n等常量。

=== 6. shr運算 >> ===

和shl相似,a shr b表示二進位制右移b位(去掉末b位),相當於a除以2的b次方(取整)。我們也經常用shr 1來代替div 2,比如二分查詢、堆的插入操作等等。想辦法用shr代替除法運算可以使程式效率大大提高。最大公約數的二進位制演算法用除以2操作來代替慢得出奇的mod運算,效率可以提高60%。

不管怎麼強調sortheap的重要性都不為過

今天看了一篇文章,覺得不管怎麼強調sortheap的重要性都不為過。理由我後面肯定會寫詳細的,這裡寫記錄下,占個位置 2007.07.10.00。13 沒想到是10號還以為9號呢 9號剛過 感覺學的不是很好,沒有達到目標,但還是把這2天學的寫上吧 1.sortheap在資料庫配置說明上是這樣的 定義...

部落格的密碼我都記不住的,蛋疼

總結 首先,技術上把我手頭的兩本書看完後,接下來想看的書是關於node的書,學無止境。當然,小程式也是必須在短期內要熟練使用的乙個技術點,其次是angular5。工作上,就目前公司的工作,雖然只來了三個月,但是覺得自己其實能夠做的更好,既然專案給了我,我就應該把控每個細節,具體點,可以這麼來做 1....

一本書讀完,什麼都記不住怎麼辦?

1.養成寫書評的習慣 大家在中學階段,想必寫過不少書評吧,或者說讀後感,但中學結束,公升入大學,大學結束,步入社會,又有多少人能把這個習慣堅持下來?有多少人是讀完就完,翻翻就算?長此以往,你記得住才怪。至於應該怎麼寫書評,每個人都有每個人的角度。但我建議不要泛泛而談,不要試圖 總結全書 把書中的邊邊...