欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)制,因此處理速度非常快。

一、位運(yùn)算符

C++ 提供了按位與(&)、按位或(| )、按位異或(^)、取反(~)、左移(<<)、右移(>>)這 6 種位運(yùn)算符。  這些運(yùn)算符只能用于整型操作數(shù),即只能用于帶符號(hào)或無(wú)符號(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ì)無(wú)符號(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來(lái)決定,為0就是偶數(shù),為1就是奇數(shù)。因此可以用if ((a & 1) == 0)代替if (a % 2 == 0)來(lái)判斷a是不是偶數(shù)。

4)整數(shù)冪

判斷一個(gè)數(shù)n ,是不是2的整數(shù)冪。比如:64=2^6,所以輸出“yes”,而65無(wú)法表示成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)常用來(lái)對(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)算符是用來(lái)將一個(gè)數(shù)的各二進(jìn)制位左移若干位,移動(dòng)的位數(shù)由右操作數(shù)指定(右操作數(shù)必須是非負(fù)值),其右邊空出的位用0填補(bǔ),高位左移溢出則舍棄該高位。

在高位沒(méi)有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++基于socket UDP網(wǎng)絡(luò)編程實(shí)現(xiàn)簡(jiǎn)單聊天室功能

    C++基于socket UDP網(wǎng)絡(luò)編程實(shí)現(xiàn)簡(jiǎn)單聊天室功能

    這篇文章主要為大家詳細(xì)介紹了C++基于socket UDP網(wǎng)絡(luò)編程實(shí)現(xiàn)簡(jiǎn)單聊天室功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Opencv Hough算法實(shí)現(xiàn)圖片中直線檢測(cè)

    Opencv Hough算法實(shí)現(xiàn)圖片中直線檢測(cè)

    這篇文章主要為大家詳細(xì)介紹了Opencv Hough算法實(shí)現(xiàn)圖片中直線檢測(cè),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • C語(yǔ)言中求余弦值的相關(guān)函數(shù)總結(jié)

    C語(yǔ)言中求余弦值的相關(guān)函數(shù)總結(jié)

    這篇文章主要介紹了C語(yǔ)言中求余弦值的相關(guān)函數(shù)總結(jié),包括求余弦和雙曲線余弦以及反余弦的求值,需要的朋友可以參考下
    2015-08-08
  • C++指向函數(shù)的指針用法詳解

    C++指向函數(shù)的指針用法詳解

    這篇文章主要介紹了C++指向函數(shù)的指針用法,對(duì)函數(shù)指針的聲明、優(yōu)先級(jí)、指針類型等概念做了較為詳盡的分析,需要的朋友可以參考下
    2014-09-09
  • 最新評(píng)論