本文目錄一覽:
- 1、C語言 位運算
- 2、c語言位運算
- 3、c語言之中的位運算符是怎麼運算的呢?
- 4、C語言位運算
- 5、C語言中的位運算是怎樣的
- 6、c語言的位符號 都是怎麼運算的啊
C語言 位運算
~取反,0取反是1,1取反是0
是左移,比如1n,表示1往左移n位,即數值大小2的n次方
右移,類似左移,數值大小除以2的n次方
按位與,1與任意數等於任意數本身,0與任意數等於0,即1x=x,0x=0
|按位或,x|y中只要有一個1則結果為1
^按位異或,x^y相等則為0,不等則為1
所有數值必須轉換為二進制數才能位運算,每一位數相對應運算
c語言位運算
一、位運算符C語言提供了六種位運算符:
按位與
| 按位或
^ 按位異或
~ 取反
左移
右移
1. 按位與運算 按位與運算符””是雙目運算符。其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1 ,否則為0。參與運算的數以補碼方式出現。
例如:95可寫算式如下: 00001001 (9的二進制補碼)00000101 (5的二進制補碼) 00000001 (1的二進制補碼)可見95=1。
按位與運算通常用來對某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a255 運算 ( 255 的二進制數為0000000011111111)。
main(){
int a=9,b=5,c;
c=ab;
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。例如: a4 指把a的各二進位向左移動4位。如a=00000011(十進制3),左移4位後為00110000(十進制48)。6. 右移運算 右移運算符「」是雙目運算符。其功能是把「 」左邊的運算數的各二進位全部右移若干位,「」右邊的數指定移動的位數。
例如:設 a=15,a2 表示把000001111右移為00000011(十進制3)。 應該說明的是,對於有符號數,在右移時,符號位將隨同移動。當為正數時, 最高位補0,而為負數時,符號位為1,最高位是補0或是補1 取決於編譯系統的規定。Turbo C和很多系統規定為補1。
main(){
unsigned a,b;
printf(“input a number: “);
scanf(“%d”,a);
b=a5;
b=b15;
printf(“a=%d\tb=%d\n”,a,b);
}
請再看一例!
main(){
char a=’a’,b=’b’;
int p,c,d;
p=a;
p=(p8)|b;
d=p0xff;
c=(p0xff00)8;
printf(“a=%d\nb=%d\nc=%d\nd=%d\n”,a,b,c,d);
}
c語言之中的位運算符是怎麼運算的呢?
C語言提供了表12—1所列出的6種位運算符以及表12-2所列出的5種擴展運算符。
表12-1
運
算
符
含
義
優
先
級
~
按位求反
高
左移
低
右移
按位與
^
按位異或
|
按位或
表12-2
擴
展
運
算
符
表
達
式
等
價
的
表
達
式
=
a=2
a=a2
=
b=1
b=b1
=
a=b
a=ab
^=
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,即00=0,01=0,10=0,11=1。
【例如】
45的運算如下:
00000100
(4)
()
00000101
(5)
00000100
(4)
因此,45的值為4。
可以利用按位與運算來實現一些特定的功能,下面介紹幾種常見的功能。
清零
如果想將一個數的全部二進制置為零,只要找一個二進制數,其中個個位要符合以下條件:原來的數中為1的位,新數中相應的位為0。然後使二者進行按位與運算即可達到清零的目的。
【例如】
原有數為171,其二進制形式為10101011,另找一個數,設它為00010100,它符合以上條件,即在原數為1的位置上,它的位值均為0。將兩個數進行運算:
10101011
()
00010100
00000000
當然也可以不用00010100這個數而用其他數(如01000100)也可以,只要符合上述條件即可。任何一個數與「0」按位於之後的結果為0。
娶一個數中某些指定位
【例如】
有一個兩位元組的短整型數x,想要取其中的低位元組,只要將x與八進制數(377)8按位於即可。如圖12-1所示,經過運算「z=xy」後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,都是0值才是0
int =1,b=2;則a|b的值為
00000000 00000000 00000000 00000001 |
00000000 00000000 00000000 00000010 =
00000000 00000000 00000000 00000011
按位與正好相反
是有一個0值就是0,只有都是1值才是1
按位異或是兩都相同為0,不相同為1
按位取反就是0變成1,1變成0了
int型是多大與CPU有關,你的書可能比較老了,還是16位,現在的主流機器都是32位的,先進的都64位了
C語言中的位運算是怎樣的
C語言是為描述系統而設計的,它的第一個應用就是UNIX操作系統的設計,因此必須具有低級語言的特點。指針運算和位運算就是其代表。
我們知道,計算機中的信息以及控制信號均是以二進制碼的0、1的形式存儲和處理的。每一個0或1稱為一個「位」(bit),8位構成一個位元組(byte)。在內存中,每一個位元組均有一個編號,稱為內存地址。
在以前的各章節中,我們都是將一個位元組(如字符型)和若干位元組(如整型、實型等)中的內容作為一個整體進行處理的(賦值、運算、I/O操作)。
位運算則是針對這些位元組中的若干位進行操作。這在系統軟件設計中和自動控制中是十分有用的。
C語言的位運算符有~,,
,
,
|,
^共6個,並可與賦值運算符相結合(除~外)成為位運算賦值操作。
應注意:參與位運算的量只能是整型和字符型。
c語言的位符號 都是怎麼運算的啊
C語言提供的位運算符列表:
運算符
含義
描述
按位與
如果兩個相應的二進制位都為1,則該位的結果值為1,否則為0
|
按位或
兩個相應的二進制位中只要有一個為1,該位的結果值為1
^
按位異或
若參加運算的兩個二進制位值相同則為0,否則為1
~
取反
~是一元運算符,用來對一個二進制數按位取反,即將0變1,將1變0
左移
用來將一個數的各二進制位全部左移N位,右補0
右移
將一個數的各二進制位右移N位,移到右端的低位被捨棄,對於無符號數,高位補0
原創文章,作者:HBJH,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/140750.html