是按2進(jìn)制代碼的同位進(jìn)行運(yùn)算。例如1010和1101這2個(gè)2進(jìn)制數(shù):
新晃網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),新晃網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為新晃數(shù)千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的新晃做網(wǎng)站的公司定做!
按位與為:
1010
1101
=
1000對(duì)應(yīng)為同為1時(shí)是1,否則為0.
按位或?yàn)椋?/p>
1010
1101
=
1111只要同位的兩個(gè)全為零時(shí)得零,否則為1
是將二進(jìn)制數(shù)按照位的對(duì)應(yīng)相與,得到一個(gè)新的二進(jìn)制數(shù)。1與0為0;1與1為1;0與0為0。
分析如下:
就是二進(jìn)制的每一位相與。
比如:1010 0011 0000 1111,結(jié)果為0000 0011。也就是與上0相當(dāng)于把那位數(shù)清0,與上1相當(dāng)于把那位保留。
擴(kuò)展資料:
1、按位與運(yùn)算符""是雙目運(yùn)算符。 其功能是參與運(yùn)算的兩數(shù)各對(duì)應(yīng)的二進(jìn)位相與。只有對(duì)應(yīng)的兩個(gè)二進(jìn)位均為1時(shí),結(jié)果位才為1 ,否則為0。參與運(yùn)算的數(shù)以補(bǔ)碼方式出現(xiàn)。
例如:95可寫(xiě)算式如下: 00001001 (9的二進(jìn)制補(bǔ)碼)00000101 (5的二進(jìn)制補(bǔ)碼) 00000001 (1的二進(jìn)制補(bǔ)碼)可見(jiàn)95=1。 按位與運(yùn)算通常用來(lái)對(duì)某些位清0或保留某些位。例如把a(bǔ) 的高八位清 0 , 保留低八位, 可作 a255 運(yùn)算 ( 255 的二進(jìn)制數(shù)為11111111)。
參考資料:百度百科:位運(yùn)算符
位運(yùn)算符有:(按位與)、|(按位或)、^(按位異或)、~
(按位取反)。
優(yōu)先級(jí)從高到低,依次為~、、^、|
按位與運(yùn)算有兩種典型用法,一是取一個(gè)位串信息的某幾位,如以下代碼截取x的最低7位:x
0177。二是讓某變量保留某幾位,其余位置0,如以下代碼讓x只保留最低6位:x
=
x
077。
按位或運(yùn)算的典型用法是將一個(gè)位串信息的某幾位置為1。如將要獲得最右4位為1,其他位與變量j原來(lái)其他位保持相同,可用邏輯或運(yùn)算017|j;
按位異或運(yùn)算的典型用法是求一個(gè)位串信息的某幾位信息的反。如欲求整型變量j的最右4位信息的反,用邏輯異或運(yùn)算017^j,就能求得j最右4位的信息的反,即原來(lái)為1的位,結(jié)果是0,原來(lái)為0的位,結(jié)果是1。
交換兩個(gè)值,不用臨時(shí)變量,假如a=3,b=4。想將a和b的值互換,可以用以下賦值語(yǔ)句實(shí)現(xiàn):
a=a^b;
b=b^a;
a=a^b;
取反運(yùn)算常用來(lái)生成與系統(tǒng)實(shí)現(xiàn)無(wú)關(guān)的常數(shù)。如要將變量x最低6位置成0,其余位不變,可用代碼x
=
x
~077實(shí)現(xiàn)。
這里的0177是8進(jìn)制數(shù),表示成
2進(jìn)制
后為000
001
111
111,除了低7位是1,其他高位都是0,0和任何數(shù)與()暢丁扳股殖噶幫拴爆莖的結(jié)果都是0!
位運(yùn)算符
C提供了六種位運(yùn)算運(yùn)算符;這些運(yùn)算符可能只允許整型操作數(shù),即char、short、int和long,無(wú)論signed或者unsigned。
按位AND
|
按位OR
^
按位異或
左移
右移
~
求反(一元運(yùn)算)
按位與操作通常用于掩去某些位,比如
n
=
n
0177;
使得n中除了低7位的各位為0。
按位或操作|用于打開(kāi)某些位:
x
=
x
|
SET_ON;
使得x的某些SET_ON與相對(duì)的位變?yōu)?。
按位異或操作^使得當(dāng)兩個(gè)操作數(shù)的某位不一樣時(shí)置該位為1,相同時(shí)置0。
應(yīng)該區(qū)分位操作符、|與邏輯操作符、||,后者從左到右的評(píng)價(jià)一個(gè)真值。比如,如果x為1、y為2,那么x
y為0,而x
y為1。
移位運(yùn)算符和將左側(cè)的操作數(shù)左移或者右移右操作數(shù)給定的數(shù)目,右操作數(shù)必須非負(fù)。因此x
2將x的值向左移動(dòng)兩位,用0填充空位;這相當(dāng)于乘4。右移一個(gè)無(wú)符號(hào)數(shù)會(huì)用0進(jìn)行填充。右移一個(gè)帶符號(hào)數(shù)在某些機(jī)器上會(huì)用符號(hào)位進(jìn)行填充(“算數(shù)移位”)而在其他機(jī)器上會(huì)用0進(jìn)行填充(“邏輯移位”)。
單目運(yùn)算符~對(duì)一個(gè)整數(shù)求反;即將每一個(gè)1的位變?yōu)?,或者相反。比如
x
=
x
~077
將x的后六位置0。注意x
~077的值取決于字長(zhǎng),因此比如如果假設(shè)x是16位數(shù)那么就是x
0177700。這種簡(jiǎn)易型式并不會(huì)造成額外開(kāi)銷(xiāo),因?yàn)閪077是一個(gè)常數(shù)表達(dá)式,可以在編譯階段被計(jì)算。
作為一個(gè)使用位操作的實(shí)例,考慮函數(shù)getbits(x,p,n)。它返回以p位置開(kāi)始的n位x值。我們假設(shè)0位在最右邊,n和p是正數(shù)。例如,getbits(x,4,3)返回右面的4、3、2位。
/*
getbits:
返回從位置p開(kāi)始的n位
*/
unsigned
getbits(unsigned
x,
int
p,
int
n)
{
return
(x
(p+1-n))
~(~0
n);
}
表達(dá)式x
(p+1-n)將需要的域移動(dòng)到字的右側(cè)。~0是全1;將其左移n為并在最右側(cè)填入0;用~使得最右側(cè)n個(gè)1成為掩碼。
授人以魚(yú)不如授人以漁。
編譯成功后,按F10一步一步運(yùn)行,下面會(huì)有監(jiān)視窗口,可以隨時(shí)查看執(zhí)行到每一步時(shí)變量的值。
a =077,表示a=八進(jìn)制數(shù)077,也就是二進(jìn)制數(shù)000 111 111,加上符號(hào)位就是00000000 00000000 00000000 00111111(int占用4個(gè)字節(jié))
b=a3,也就是按位與,
00000000 00000000 00000000 00111111
00000000 00000000 00000000 00000011 =
00000000 00000000 00000000 00000011
也就是說(shuō)這個(gè)時(shí)候b = 3
b=7表示b=b7,
00000000 00000000 00000000 00000011
00000000 00000000 00000000 00111111 =
00000000 00000000 00000000 00000011
結(jié)果當(dāng)然也是3
按位與就是對(duì)應(yīng)的位同時(shí)為1,那么結(jié)果就為1