久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

位操作學(xué)習(xí)

 丹楓無跡 2022-11-14 發(fā)布于北京

位操作學(xué)習(xí)

位操作是程序設(shè)計(jì)中對(duì)位模式或二進(jìn)制數(shù)的一元和二元操作,位運(yùn)算比加減運(yùn)算速度略快,,通常位運(yùn)算比乘除運(yùn)算要快很多,。

取反(NOT)

取反是一元運(yùn)算符,對(duì)一個(gè)二進(jìn)制數(shù)的每一位執(zhí)行邏輯反操作,,使數(shù)組1變成0,,使0變成1。例如:

NOT 0001(十進(jìn)制7)

= 1000(十進(jìn)制8)

許多的程序語(yǔ)言中,,取反操作符用的是~表示,,此操作符與邏輯非操作符不同,在c++中,,邏輯非將數(shù)組整體看作一個(gè)bool類型——將真值轉(zhuǎn)為假值,,將假值轉(zhuǎn)化為真值,而c語(yǔ)言將0轉(zhuǎn)化為1,,將非零值轉(zhuǎn)化為0,,邏輯非并不是一個(gè)位操作。

按位或(OR)

按位與處理兩個(gè)長(zhǎng)度相同的二進(jìn)制數(shù),,兩個(gè)相應(yīng)的二進(jìn)制中只要有一個(gè)為1,,該位的結(jié)果值為1。

? 0101

OR 0011

= 0111

按位或能夠?qū)⒚恳晃豢醋髌鞓?biāo),,在二進(jìn)制書中的每一位可以表示不同的布爾變量,,使用按位或操作可以將二進(jìn)制數(shù)的某一位設(shè)為1。這一技巧通常用來保存大量的布爾變量,。

按位異或(XOR)

按位異或運(yùn)算,,對(duì)于長(zhǎng)二進(jìn)制模式或者二進(jìn)制數(shù)的每一位執(zhí)行邏輯異或操作,操作的結(jié)果是如果某位不同則該位為一,,否則該位為0,。

? 0101

XOR 0011

? = 0110

在匯編語(yǔ)言中可以使用按位異或作為寄存器的值設(shè)為0的捷徑。

按位異或也可以用于在比特集合中切換旗標(biāo),,這一技巧可用于操作布爾變量的比特模式,。

按位與(AND)

按位與處理兩個(gè)長(zhǎng)度相同的二進(jìn)制數(shù),,兩個(gè)相應(yīng)的二進(jìn)制數(shù)都為1,,則該位的結(jié)果為1,否則為零,。

0101

AND 0011

?= 0001

移位

移位是一個(gè)二元運(yùn)算符,,用來將一個(gè)二進(jìn)制數(shù)中的每一位全部向一個(gè)方向移動(dòng)指定位,,溢出的部分將會(huì)被舍棄,而空缺的部分填入一定的值,。

可以進(jìn)行移位的數(shù)據(jù)類型:

char,、short、int,、long,、unsigned char、unsigned short,、unsigned int,、unsigned long

不可以進(jìn)行移位的數(shù)據(jù)類型:

double、float,、bool,、long double

邏輯移位

對(duì)于邏輯移位,就是不考慮符號(hào)位,,移位的結(jié)果只是數(shù)據(jù)所有的位數(shù)進(jìn)行移位,。根據(jù)移位操作的目的,左移時(shí),,低位補(bǔ)0,,右移時(shí),高位補(bǔ)0

算術(shù)移位

算術(shù)是帶有符號(hào)的數(shù)據(jù),,所以我們直接移動(dòng)所有的位數(shù),,這可能會(huì)使得符號(hào)不正確。

關(guān)于數(shù)的移位,,特別需要注意正數(shù),,三碼相同,所以無論左移還是右移都是補(bǔ)0.而負(fù)數(shù)的補(bǔ)碼就需要注意,,左移在右邊補(bǔ)0,,右移需要在左邊補(bǔ)1,有一個(gè)很有趣的誤區(qū)是,,認(rèn)為符號(hào)位保持不變,,僅僅移動(dòng)數(shù)據(jù)位,這是不對(duì)的,,因?yàn)闊o論數(shù)據(jù)位還是符號(hào)位,,都是二進(jìn)制,在整體大遷移的過程中,,符號(hào)位也是要跟隨潮流的,。只不過,為了保證右移后,,和原來的符號(hào)數(shù)一樣,,因此,,負(fù)數(shù)在右移時(shí)左邊補(bǔ)1.

常見的位運(yùn)算問題

1,、位運(yùn)算實(shí)現(xiàn)乘除法

一個(gè)數(shù)向右移一位相當(dāng)于除以2,,向左移相當(dāng)于乘以2

2,、位操作交換兩數(shù)

位操作交換兩數(shù)可以不需要第三個(gè)臨時(shí)變量,,雖然普通操作也可以做到,但是沒有其效率高

//普通交換
void swap(int& a,int& b)
{
    a = a + b;
    b = a - b;
    a = a - b;
}

//異或操作
void swap(int& a,int& b)
{
    if(a != b)
    {
        a ^= b;
        b ^= a;
        a ^= b;
    }
}

3,、位操作統(tǒng)計(jì)二進(jìn)制中 1 的個(gè)數(shù)

count = 0  
while(a){  
  a = a & (a - 1);  
  count++;  
}  

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多