日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

位运算的一些技巧总结

發(fā)布時間:2023/12/14 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 位运算的一些技巧总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

位運算

這里主要總結(jié)一些位運算的基礎(chǔ)用法,不從位運算的運算過程展開了:

1.&(and)運算

&運算通常用于二進制取位操作,例如一個數(shù) & 1的結(jié)果就是取二進制的最末位。

基礎(chǔ)用法:

(1)可以用來判斷一個整數(shù)的奇偶,二進制的最末位為0表示該數(shù)為偶數(shù),最末位為1表示該數(shù)為奇數(shù)。

(2)x & (x-1) 用于消去 x 的最后一位 1。

(3)在運用(2)的基礎(chǔ)上可以用來判斷一個正整數(shù)是不是2的整數(shù)冪次,如果x & (x-1) 是0,說明是;如果不是0,說明不是;


2.| (or)運算

|運算通常用于二進制特定位上的無條件賦值,例如一個數(shù) | 1的結(jié)果就是把二進制最末位強行變成1。

基礎(chǔ)用法:

(1)如果需要把二進制最末位變成0,對這個數(shù)or 1之后再減一就可以了,其實際意義就是把這個數(shù)強行變成最接近的偶數(shù)。

(2)


3.^(xor)運算

^運算通常用于對二進制的特定一位進行取反操作,因為異或可以這樣定義:0和1異或0都不變,異或1則取反。

基礎(chǔ)用法:

(1) ^ 運算的逆運算是它本身,也就是說兩次異或同一個數(shù)最后結(jié)果不變,即(a ^ b) ^ b = a。

(2)一個數(shù) a^a=0;

(3)運用(1)可以延伸很多用法,比如判斷一個數(shù)組里面出現(xiàn)一次的數(shù)(其他的數(shù)出現(xiàn)兩次);

(4)是第(3)的進階,有一個 n 個元素的數(shù)組,除了兩個數(shù)只出現(xiàn)一次外,其余元素都出現(xiàn)兩次,讓你找出這兩個只出現(xiàn)一次的數(shù)分別是幾?
這道題的思路是把所有元素都異或,那么得到的結(jié)果就是那兩個只出現(xiàn)一次的元素異或的結(jié)果。然后把這個結(jié)果轉(zhuǎn)化為二進制,找到為 1 的一個位置,根據(jù)這個位置是否為1把數(shù)組里所有的元素分成兩部分;然后兩部分分別異或,得到的就是兩個只出現(xiàn)一次的數(shù);


4.這幾種常見的位運算運算性質(zhì)

(1)信息丟失

位運算中“與”、“或”會造成信息丟失,他們是單向運算,不可逆運算。

但是“異或”不會,例如:

x ^ a = y;
當a 確定時,x與y 一一對應,且
x = y ^ a;

(2)運算性質(zhì)

一般情況下,結(jié)合律和分配律是失效的,只有交換律能安全使用。

例如:

交換律:
a | b=b | a;
a ^ b=b ^ a;
a & b=b & a;

結(jié)合律:
(3|1)&2=2;
3|1&2=3;

分配律:
(4|3)^1=6;
(4 ^1 ) | ( 3 ^1)=7;

但是對于單一的位運算來說,結(jié)合律都是符合的,其實就是變?yōu)榱私粨Q律;


貼一張用法大全圖:

總結(jié)

以上是生活随笔為你收集整理的位运算的一些技巧总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。