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

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

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

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

一、位運(yùn)算符

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

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

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

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

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

即:兩位同時(shí)為“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)算可以取出一個(gè)數(shù)中指定位。例如:要取出整數(shù)84從左邊算起的第3、4、5、7、8位,只要執(zhí)行84 & 59,因?yàn)?4對(duì)應(yīng)的二進(jìn)制為01010100,59對(duì)應(yīng)的二進(jìn)制為00111011,01010100 &  00111011=  00010000   可知84從左邊算起的第3、4、5、7、8位分別是0、1、0、0、0。
 3、清零。如果想將一個(gè)單元清零,使其全部二進(jìn)制位為0,只要與一個(gè)各位都為零的數(shù)值相與,結(jié)果為零。

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

1)清零

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

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

比如取數(shù) X=1010 1110 的低4位,只需要另找一個(gè)數(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ù)冪

判斷一個(gè)數(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)常用來對(duì)一個(gè)數(shù)據(jù)的某些位設(shè)置為1

比如將數(shù) X=1010 1110 的低4位設(shè)置為1,只需要另找一個(gè)數(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、對(duì)于任何數(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),只需要另找一個(gè)數(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ù)的各個(gè)二進(jìn)制位都取反,即1變?yōu)?,0變?yōu)?。 

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

左移運(yùn)算符是用來將一個(gè)數(shù)的各二進(jìn)制位左移若干位,移動(dòng)的位數(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ù)左移時(shí)被溢出舍棄的高位中不包含1的情況。

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

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

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

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

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

定義:將一個(gè)數(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)容請(qǐng)搜索腳本之家以前的文章或繼續(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語(yǔ)言實(shí)現(xiàn)輸出鏈表中倒數(shù)第k個(gè)節(jié)點(diǎn)

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

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

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

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

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

    這篇文章主要為大家詳細(xì)介紹了C++圖像處理之雙邊濾波,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    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)存對(duì)齊,alignof查詢類型對(duì)齊要求,alignas指定最小對(duì)齊值,幫助優(yōu)化性能、實(shí)現(xiàn)跨平臺(tái)兼容,具有一定的參考價(jià)值,感興趣的可以了解一下
    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ì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-02-02
  • C++中多線程間共享數(shù)據(jù)詳解

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

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

最新評(píng)論

金秀| 芦山县| 张家界市| 石泉县| 融水| 阿瓦提县| 进贤县| 甘泉县| 遵化市| 韶山市| 宜君县| 米泉市| 喀喇沁旗| 隆德县| 普陀区| 西青区| 门头沟区| 谢通门县| 鄯善县| 常宁市| 汤原县| 政和县| 永安市| 玉门市| 紫阳县| 陆良县| 瑞昌市| 黄陵县| 犍为县| 文昌市| 合肥市| 长岭县| 玉门市| 西盟| 石棉县| 稷山县| 盈江县| 黎平县| 辉县市| 文水县| 湖州市|