最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++ 位運(yùn)算的具體實(shí)現(xiàn)

 更新時間:2024年02月11日 09:48:44   作者:十秒耿直拆包選手  
位運(yùn)算直接對內(nèi)存數(shù)據(jù)進(jìn)行操作,不需要轉(zhuǎn)換成十進(jìn)制,因此處理速度非???本文主要介紹了C++ 位運(yùn)算的具體實(shí)現(xiàn),具有一定的參考價值,感興趣的可以了解一下

任何信息在計(jì)算機(jī)中都是采用二進(jìn)制表示的,數(shù)據(jù)在計(jì)算機(jī)中是以補(bǔ)碼形式存儲的,位運(yùn)算就是直接對整數(shù)在內(nèi)存中的二進(jìn)制位進(jìn)行運(yùn)算。由于位運(yùn)算直接對內(nèi)存數(shù)據(jù)進(jìn)行操作,不需要轉(zhuǎn)換成十進(jìn)制,因此處理速度非??臁?/p>

一、位運(yùn)算符

C++ 提供了按位與(&)、按位或(| )、按位異或(^)、取反(~)、左移(<<)、右移(>>)這 6 種位運(yùn)算符。  這些運(yùn)算符只能用于整型操作數(shù),即只能用于帶符號或無符號的 char、short、int 與 long 類型。

&按位與兩個位都為1時,結(jié)果才為1
|按位或兩個位都為0時,結(jié)果才為0
^按位異或兩個位相同為0,相異為1
~取反0變1,1變0
<<左移各二進(jìn)位全部左移若干位,高位丟棄,低位補(bǔ)0
>>右移各二進(jìn)位全部右移若干位,對無符號數(shù),高位補(bǔ)0,有符號數(shù),各編譯器處理方法不一樣,有的補(bǔ)符號位(算術(shù)右移),有的補(bǔ)0(邏輯右移)

1:按位與運(yùn)算符(&) 

 “a&b”是指將參加運(yùn)算的兩個整數(shù)a和b,按二進(jìn)制位進(jìn)行“與”運(yùn)算。

運(yùn)算規(guī)則:0&0=0;  0&1=0;   1&0=0;    1&1=1;      

即:兩位同時為“1”,結(jié)果才為“1”,否則為0
例如:3&5  即 0000 0011& 0000 0101 = 0000 0001  因此,3&5的值得1。
另,負(fù)數(shù)按補(bǔ)碼形式參加按位與運(yùn)算。
按位與&比較實(shí)用的例子:
1、比如我們經(jīng)常要用的是否被2整除,一般都寫成   if(n % 2 == 0) 可以換成 if((n&1) == 0) 
2、按位與運(yùn)算可以取出一個數(shù)中指定位。例如:要取出整數(shù)84從左邊算起的第3、4、5、7、8位,只要執(zhí)行84 & 59,因?yàn)?4對應(yīng)的二進(jìn)制為01010100,59對應(yīng)的二進(jìn)制為00111011,01010100 &  00111011=  00010000   可知84從左邊算起的第3、4、5、7、8位分別是0、1、0、0、0。
 3、清零。如果想將一個單元清零,使其全部二進(jìn)制位為0,只要與一個各位都為零的數(shù)值相與,結(jié)果為零。

與運(yùn)算的用途:

1)清零

如果想將一個單元清零,即使其全部二進(jìn)制位為0,只要與一個各位都為零的數(shù)值相與,結(jié)果為零。

2)取一個數(shù)的指定位

比如取數(shù) X=1010 1110 的低4位,只需要另找一個數(shù)Y,令Y的低4位為1,其余位為0,即Y=0000 1111,然后將X與Y進(jìn)行按位與運(yùn)算(X&Y=0000 1110)即可得到X的指定位。

3)判斷奇偶

只要根據(jù)最未位是0還是1來決定,為0就是偶數(shù),為1就是奇數(shù)。因此可以用if ((a & 1) == 0)代替if (a % 2 == 0)來判斷a是不是偶數(shù)。

4)整數(shù)冪

判斷一個數(shù)n ,是不是2的整數(shù)冪。比如:64=2^6,所以輸出“yes”,而65無法表示成2的整數(shù)冪的形式,所以輸出“NO”。 

#include<bits/stdc++.h>
using namespace std;
int main()
{  int n;
   cin>>n;
   if(n&(n-1))cout<<"NO";
   else cout<<"Yes";
}

 2:按位或運(yùn)算符(|) 

運(yùn)算規(guī)則:0|0=0;  0|1=1;  1|0=1;   1|1=1; 

或運(yùn)算的用途:

1)常用來對一個數(shù)據(jù)的某些位設(shè)置為1

比如將數(shù) X=1010 1110 的低4位設(shè)置為1,只需要另找一個數(shù)Y,令Y的低4位為1,其余位為0,即Y=0000 1111,然后將X與Y進(jìn)行按位或運(yùn)算(X|Y=1010 1111)即可得到。

3:按位異或運(yùn)算符(^)

運(yùn)算規(guī)則:0 ^ 0=0;  0 ^ 1=1;  1^ 0=1;   1^1=0; 

異或的幾條性質(zhì):

  • 1、交換律
  • 2、結(jié)合律 (a^b)^c == a^(b^c)
  • 3、對于任何數(shù)x,都有 x^x=0,x^0=x
  • 4、自反性: a^b^b=a^0=a;

異或運(yùn)算的用途:

1)翻轉(zhuǎn)指定位

比如將數(shù) X=1010 1110 的低4位進(jìn)行翻轉(zhuǎn),只需要另找一個數(shù)Y,令Y的低4位為1,其余位為0,即Y=0000 1111,然后將X與Y進(jìn)行異或運(yùn)算(X^Y=1010 0001)即可得到。

2)與0相異或值不變

例如:1010 1110 ^ 0000 0000 = 1010 1110

4:按位取反運(yùn)算符(~)

按位取反運(yùn)算符(~)是指將整數(shù)的各個二進(jìn)制位都取反,即1變?yōu)?,0變?yōu)?。 

5:左移運(yùn)算符(<<)

左移運(yùn)算符是用來將一個數(shù)的各二進(jìn)制位左移若干位,移動的位數(shù)由右操作數(shù)指定(右操作數(shù)必須是非負(fù)值),其右邊空出的位用0填補(bǔ),高位左移溢出則舍棄該高位。

在高位沒有1的情況下,左移1位相當(dāng)于該數(shù)乘以2,左移2位相當(dāng)于該數(shù)乘以2*2=4,15<<2=60,即乘了4。
但此結(jié)論只適用于該數(shù)左移時被溢出舍棄的高位中不包含1的情況。

例如:143<<2  結(jié)果為60   因?yàn)?43轉(zhuǎn)換為進(jìn)制為10001111,左移2得00111100 ,結(jié)果為60。

定義:將一個運(yùn)算對象的各二進(jìn)制位全部左移若干位(左邊的二進(jìn)制位丟棄,右邊補(bǔ)0)。

設(shè) a=1010 1110,a = a<< 2 將a的二進(jìn)制位左移2位、右補(bǔ)0,即得a=1011 1000。

若左移時舍棄的高位不包含1,則每左移一位,相當(dāng)于該數(shù)乘以2。

6:右移運(yùn)算符(>>)

定義:將一個數(shù)的各二進(jìn)制位全部右移若干位,正數(shù)左補(bǔ)0,負(fù)數(shù)左補(bǔ)1,右邊丟棄。

例如:a=a>>2 將a的二進(jìn)制位右移2位,左補(bǔ)0 或者 左補(bǔ)1得看被移數(shù)是正還是負(fù)。

操作數(shù)每右移一位,相當(dāng)于該數(shù)除以2。

7:復(fù)合賦值運(yùn)算符

 位運(yùn)算符與賦值運(yùn)算符結(jié)合,組成新的復(fù)合賦值運(yùn)算符,它們是:

1、&=   例:a &=b       相當(dāng)于a=a& b
2、|=   例:a |=b           相當(dāng)于a=a |b
3、>>=  例:a >>=b    相當(dāng)于a=a>> b
4、<<= 例:a<<=b      相當(dāng)于a=a<< b
5、^=   例:a ^= b       相當(dāng)  a=a ^b

到此這篇關(guān)于C++ 位運(yùn)算的具體實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)C++ 位運(yùn)算內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • C++中strstr函數(shù)的實(shí)現(xiàn)方法總結(jié)

    C++中strstr函數(shù)的實(shí)現(xiàn)方法總結(jié)

    這篇文章主要介紹了C++中strstr函數(shù)的實(shí)現(xiàn)方法總結(jié)的相關(guān)資料,希望通過本文能幫助到大家,讓大家掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • 深入解析C++中的智能指針

    深入解析C++中的智能指針

    本文介紹了C++中RAII機(jī)制和智能指針的概念、使用及實(shí)現(xiàn)原理,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2025-10-10
  • C++實(shí)現(xiàn)softmax函數(shù)的面試經(jīng)驗(yàn)

    C++實(shí)現(xiàn)softmax函數(shù)的面試經(jīng)驗(yàn)

    這篇文章主要為大家介紹了C++實(shí)現(xiàn)softmax函數(shù)的面試經(jīng)驗(yàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • C語言實(shí)現(xiàn)輸出鏈表中倒數(shù)第k個節(jié)點(diǎn)

    C語言實(shí)現(xiàn)輸出鏈表中倒數(shù)第k個節(jié)點(diǎn)

    這篇文章主要介紹了C語言實(shí)現(xiàn)輸出鏈表中倒數(shù)第k個節(jié)點(diǎn),主要涉及鏈表的遍歷操作,是數(shù)據(jù)結(jié)構(gòu)中鏈表的常見操作。需要的朋友可以參考下
    2014-09-09
  • 淺談C++的淺拷貝出現(xiàn)的錯誤

    淺談C++的淺拷貝出現(xiàn)的錯誤

    下面小編就為大家?guī)硪黄獪\談C++的淺拷貝出現(xiàn)的錯誤。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • C++圖像處理之雙邊濾波

    C++圖像處理之雙邊濾波

    這篇文章主要為大家詳細(xì)介紹了C++圖像處理之雙邊濾波,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • vc中float與DWORD的互想轉(zhuǎn)換實(shí)現(xiàn)代碼

    vc中float與DWORD的互想轉(zhuǎn)換實(shí)現(xiàn)代碼

    這篇文章主要介紹了vc中float與DWORD的互想轉(zhuǎn)換實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2017-06-06
  • C++11中alignof和alignas的入門

    C++11中alignof和alignas的入門

    C++11引入alignof和alignas,用于控制內(nèi)存對齊,alignof查詢類型對齊要求,alignas指定最小對齊值,幫助優(yōu)化性能、實(shí)現(xiàn)跨平臺兼容,具有一定的參考價值,感興趣的可以了解一下
    2025-06-06
  • c++11之統(tǒng)一初始化(Uniform Initalization)實(shí)現(xiàn)

    c++11之統(tǒng)一初始化(Uniform Initalization)實(shí)現(xiàn)

    本文主要介紹了c++11之統(tǒng)一初始化(Uniform Initalization)實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-02-02
  • C++中多線程間共享數(shù)據(jù)詳解

    C++中多線程間共享數(shù)據(jù)詳解

    這篇文章主要為大家詳細(xì)介紹了C++中多線程間共享數(shù)據(jù)的相關(guān)知識,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01

最新評論

通榆县| 葵青区| 毕节市| 虹口区| 乐业县| 常宁市| 唐山市| 延川县| 利川市| 南郑县| 黔西| 星座| 亚东县| 江达县| 南陵县| 伊川县| 鄂伦春自治旗| 桦南县| 耒阳市| 金寨县| 永仁县| 安丘市| 中西区| 文成县| 布尔津县| 鹤壁市| 耿马| 海伦市| 靖边县| 达孜县| 延川县| 崇文区| 墨江| 哈密市| 盘锦市| 平定县| 罗源县| 炎陵县| 商城县| 桑植县| 青冈县|