當前位置:首頁 » 編程語言 » c語言按位運算符教學視頻
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言按位運算符教學視頻

發布時間: 2023-08-21 09:34:20

c語言 字元串 按位與

// 編寫的以高位相與的函數:

char*str;
voidstringv(char*str1,char*str2)
{
inti;
for(i=0;str1[i]!=''&&str[i]!='';i++)
str[i]=(str1[i]-0x30)&(str2[i]-0x30)+0x30;
str[i]='';
}

② c語言之中的位運算符是怎麼運算的呢

C語言提供了表12—1所列出的6種位運算符以及表12-2所列出的5種擴展運算符。
表12-1
運 算 符 含 義 優 先 級
~ 按位求反 高
<< 左移


>> 右移
& 按位與
^ 按位異或
| 按位或
表12-2
擴 展 運 算 符 表 達 式 等 價 的 表 達 式
<<= a<<=2 a=a<<2
>>= b>>=1 b=b>>1
&= a&=b a=a&b
^= a^=b a=a^b
|= a|=b a=a|b
【說明】
位運算符中,只有「反求」(~)是單目運算符,即要求運算符兩側各有一個運算量,其餘均為雙目運算符。
運算的運算對象只能是整形或字元型數據,不能是其他類型的數據,在VC 6.0中整形數據佔4個位元組,字元型數據佔1個位元組。
參與運算時,操作數都必須首先轉換成二進制形式,然後再執行相應的按位運算。
各雙目運算符與賦值運算符結合可以組成擴展的賦值運算符,見表12-2.

12.2 位運算符詳解
12.2.1 按位與運算
按位與運算「&」的運算格式:
操作數1&操作數2
【說明】
其中「操作數1」和操作數「2」必須是整型或字元型數據。
按位與運算規則是:當參加運算的2個二進制數的對應位都為1,則該位的結果為1,否則為0,即0&0=0,0&1=0,1&0=0,1&1=1。
【例如】
4&5的運算如下:
00000100 (4)
(&) 00000101 (5)
00000100 (4)
因此,4&5的值為4。
可以利用按位與運算來實現一些特定的功能,下面介紹幾種常見的功能。
清零
如果想將一個數的全部二進制置為零,只要找一個二進制數,其中個個位要符合以下條件:原來的數中為1的位,新數中相應的位為0。然後使二者進行按位與運算即可達到清零的目的。

【例如】
原有數為171,其二進制形式為10101011,另找一個數,設它為00010100,它符合以上條件,即在原數為1的位置上,它的位值均為0。將兩個數進行&運算:
10101011
(&) 00010100
00000000
當然也可以不用00010100這個數而用其他數(如01000100)也可以,只要符合上述條件即可。任何一個數與「0」按位於之後的結果為0。
娶一個數中某些指定位
【例如】
有一個兩位元組的短整型數x,想要取其中的低位元組,只要將x與八進制數(377)8按位於即可。如圖12-1所示,經過運算「z=x&y」後z只保留x的低位元組,高位元組為0.

x 00 10 11 00 10 10 11 00
y 00 00 00 00 11 11 11 11
z 00 00 00 00 10 10 11 00
圖12-1 取x的低八位數

x 00 10 11 00 10 10 11 00
y 11 11 11 11 00 00 00 00
Z 00 10 11 00 00 00 00 00
圖12-2 取x的高8位

如果想取兩個位元組中的高位元組,如圖12-2所示只需進行運算z = x &(177400)8。
保留一個數的某些位
要想將哪一位保留下來,就與一個數進行&運算,此數在該位取1。
【例如】
有一數01110100,想把其中左面第1、3、5位保留下來,可以這樣運算:
01110100 (十進制數116)
(&) 10101010 (十進制數170)
00100000 (十進制數32)

③ c語言中按位與按位或是什麼意思

按位運算符「&」是雙目運算符。其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位都為1時,結果位才為1。參與運算的兩個數均以補碼出現。

按位或運算符「|」是雙目運算符。其功能是參與運算的兩數各對應的二進位相或。只要對應的二個二進位有一個為1時,結果位就為1。當參與運算的是負數時,參與兩個數均以補碼出現。

整數在計算機中用二進制的位來表示,C語言提供一些運算符可以直接操作整數中的位,稱為位運算,這些運算符的操作數都必須是整型的。

按位與運算按位與運算符「&」是雙目運算符。其褲槐功歲隱能是參與運算的兩胡雀友數各對應的二進位相與。只要對應的二個二進位都為1時,結果位就為1。參與運算的兩個數均以補碼出現。例如:3&10可寫算式如下:00000011&0000101000000010十進制2。

④ C語言位運算

C語言提供的位運算:
運算符
含義
&
按位與
|
按位或

按位異或

取反
<<
左移
>>
右移
說明:
1。位運算符中除∽以外,均為二目(元)運算符,即要求兩側各有一個運算了量。
2、運算量只能是整形或字元型的數據,不能為實型數據。
「按位與」運算符(&)
規定如下:
0&0=0
0&1=0
1&0=0
1&1=1
例:3&5=?
先把3和5以補碼表示,再進行按位與運算。
3的補碼:
00000011
5的補碼:
00000101
--------------------------------------------------------------------------------
&:
00000001
3&5=1
「按位或」運算符(|)
規定如下:
0|0=0
0&1=1
1&0=1
1&1=1
例:060|017=?
將八進制數60與八進制數17進行按位或運算。
060
00110000
017
00001111
--------------------------------------------------------------------------------
|:
00111111
060|017=077
「異或」運算符(∧),也稱XOR運算符
規定如下:
0∧0=0
0∧1=1
1∧0=1
1∧1=0
例:57∧42=?
將十進制數57與十進制數42進行按位異或運算。
57
00111001
42
00101010
--------------------------------------------------------------------------------
∧:
00010011
57∧42=19
「取反」運算符(∽)
規定如下:
∽0=1
∽1=0
例:∽025=?
對八進制數25(即二進制0000000000010101)按位求反。
0000000000010101

1111111111101010
∽025=177752
左移運算符(<<)

將一個數的二進位全部左移若干位,若高位左移後溢出,則舍棄,不起作用。
例:a=a<<2
將a的二進制數左移2位,右補0。
若a=15,即二進制數00001111,則
a
00001111


a<<1
00011110


a<<2
00111100
最後a=60
右移運算符(>>)

將一個數的二進位全部右移若干位,低位移出部分舍棄。
例:a=a>>2
將a的二進制數右移2位,左補0。
若a=15,即二進制數00001111,則
a
00001111


a>>1
00000111


a>>2
00000011
最後a=3
位運算符與賦值運算符結合可以組成擴展的賦值運算符
如:&=,|=,>>=,<<=,∧=
例:a&=b相當於a=a&b
a<<=2相當於a=a<<2
不同長度的數據進行位運算
如果兩個數據長度不同(例如long型和int型)進行位運算時(如a&b,而a為long型,b為int型),系統會將二者按右端對齊。如果b為正數,則左側16位補滿0。若b為負,左端應補滿1。如果b為無符號整數型,則左端添滿0。
位運算舉例
例:取一個整數a從右端開始的4∽7位
考慮如下:1、先是a右移4位,即a>>4
2、設置一個低4位全為0的數,即∽(∽0<<4)
3、將上面兩式進行與運算,即a>>4&∽(∽0<<4)
程序如下:
main()
{unsigned
a,b,c,d;
scanf("%o",&a);
b=a>>4;
c=∽(∽0<<4);
d=b&c;
printf("%o\n%o\n",a,b);
}
結果:331↙
331(a的值,八進制)
15
(d的值,八進制)
例:循環移位。要求將a進行右循環移位。即a右循環移n位,將a中原來左面(16-n)位右移n位。現假設兩個位元組存放一個整數。如右圖。
考慮如下:1、先將a右端n位放到b中的高n位中,即:b=a<<(16-n)
2、將a右移n位,其左面高位n位補0,即c=a>>n
3、將c與b進行按位或運算,即c=c|b
程序如下:
main()
{unsigned
a,b,c;int
n:
scanf("a=%o,n=%d",&a,&n);
b=a<<(16-n);
c=a>>n;
c=c|b;
printf("%o\n%o",a,c);
}
結果:a=157653,n=3↙
331(a的值,八進制)
15
(d的值,八進制)
位段
所謂位段是以位為單位定義長度的結構體類型中的成員。
例:struct
packed-data
{unsigned
a:2;
unsigned
b:6;
unsigned
c:4;
unsigned
d:4;
int
i;
}data;

⑤ c語言的按位運算符怎麼操作!

位運算

在很多系統程序中常要求在位(bit)一級進行運算或處理。C語言提供了位運算的功能, 這使得C語言也能像匯編語言一樣用來編寫系統程序。

一、位運算符C語言提供了六種位運算符:

& 按位與
| 按位或
^ 按位異或
~ 取反
<< 左移
>> 右移

1. 按位與運算 按位與運算符"&"是雙目運算符。其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1 ,否則為0。參與運算的數以補碼方式出現。

例如:9&5可寫算式如下: 00001001 (9的二進制補碼)&00000101 (5的二進制補碼) 00000001 (1的二進制補碼)可見9&5=1。

按位與運算通常用來對某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 運算 ( 255 的二進制數為0000000011111111)。
main(){
int a=9,b=5,c;
c=a&b;
printf("a=%d\nb=%d\nc=%d\n",a,b,c);
}

2. 按位或運算 按位或運算符「|」是雙目運算符。其功能是參與運算的兩數各對應的二進位相或。只要對應的二個二進位有一個為1時,結果位就為1。參與運算的兩個數均以補碼出現。
例如:9|5可寫算式如下: 00001001|00000101
00001101 (十進制為13)可見9|5=13
main(){
int a=9,b=5,c;
c=a|b;
printf("a=%d\nb=%d\nc=%d\n",a,b,c);
}

3. 按位異或運算 按位異或運算符「^」是雙目運算符。其功能是參與運算的兩數各對應的二進位相異或,當兩對應的二進位相異時,結果為1。參與運算數仍以補碼出現,例如9^5可寫成算式如下: 00001001^00000101 00001100 (十進制為12)
main(){
int a=9;
a=a^15;
printf("a=%d\n",a);
}

4. 求反運算 求反運算符~為單目運算符,具有右結合性。 其功能是對參與運算的數的各二進位按位求反。例如~9的運算為: ~(0000000000001001)結果為:1111111111110110

5. 左移運算 左移運算符「<<」是雙目運算符。其功能把「<< 」左邊的運算數的各二進位全部左移若干位,由「<<」右邊的數指定移動的位數,
高位丟棄,低位補0。例如: a<<4 指把a的各二進位向左移動4位。如a=00000011(十進制3),左移4位後為00110000(十進制48)。6. 右移運算右移運算符「>>」是雙目運算符。其功能是把「>> 」左邊的運算數的各二進位全部右移若干位,「>>」右邊的數指定移動的位數。
例如:設 a=15,a>>2 表示把000001111右移為00000011(十進制3)。應該說明的是,對於有符號數,在右移時,符號位將隨同移動。當為正數時, 最高位補0,而為負數時,符號位為1,最高位是補0或是補1 取決於編譯系統的規定。Turbo C和很多系統規定為補1。
main(){
unsigned a,b;
printf("input a number: ");
scanf("%d",&a);
b=a>>5;
b=b&15;
printf("a=%d\tb=%d\n",a,b);
}
請再看一例!
main(){
char a='a',b='b';
int p,c,d;
p=a;
p=(p<<8)|b;
d=p&0xff;
c=(p&0xff00)>>8;
printf("a=%d\nb=%d\nc=%d\nd=%d\n",a,b,c,d);
}