c語言中位運算符
A. c語言中的按位運算符和邏輯運算符
&&是邏輯與,計算機的邏輯無非兩種,0和非0,7和8都是非0,那麼7&&8就是非0,也就是真了。
&是位操作,即按兩個操作數的二進制每一位進行與運算
7的二進制:00000111
8的二進制:00001000
與運算後為:00000000,結果就是假了
B. C語言中位運算
0110101
1011001
0010001
結果不是1,是上面這個,但是可以說結果是非0
C. 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);
}
D. C語言中按位與(&)運算符是什麼意思
位運算符就是直接對整數在內存中的二進制位進行操作運算。比如,&&運算本來是一個邏輯運算符,但整數與整數之間可以用&進行運算。舉個例子,6的二進制是110,11的二進制是1011,那麼6 & 11的結果就是2,它是二進制對應位進行邏輯運算的結果(0表示False,1表示True,空位都當0處理)。
C語言提供了六種按位運算符:& 按位與| 按位或^ 按位異或~ 取反<< 左移>> 右移
也就是與上0相當於把那位數清0,與上1相當於把那位保留。
E. C語言中「按位運算符」是什麼意思
1、按位運算符就是直接對整數在內存中的二進制位進行操作運算。比如,&&運算本來是一個邏輯運算符,但整數與整數之間可以用&進行運算。舉個例子,6的二進制是110,11的二進制是1011,那麼6 & 11的結果就是2,它是二進制對應位進行邏輯運算的結果(0表示False,1表示True,空位都當0處理)。
2、C語言提供了六種按位運算符:
& 按位與
| 按位或
^ 按位異或
~ 取反
<< 左移
>> 右移
F. C語言中的位運算是怎樣的
如果你把所有的操作數都用二進制來表達就清晰了,如下
位與 & 相同位按與來運算即可 如:
1 & 2 =0
-------------
二進制是這樣的 01 & 10 = 00
位或 | 一樣,按位來或即可
1|2 = 3
--------------
二進制是這樣: 01|10=11
其他位運算都是按二進制位來運算的,你轉換成2進制就好理解了
G. 關於c語言中的按位運算符!
反碼是二進制數據的一種表示形式,還可以用原碼,補碼移碼表示。按位運算是一種計算方式,表示對應為相加但是不進位,希望對你有幫助
H. 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)
I. C語言位運算
按位與 | 按位或 ^
按位異或 ~ 取反 <<
左移 >> 右移<<
1. 按位與運算。按位與運算符"&"是雙目運算符。其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1 ,否則為0。參與運算的數以補碼方式出現。
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); }。
5. 左移運算。左移運算符「<<」是雙目運算符。其功能把「<< 」左邊的運算數的各二進位全部左移若干位,由「<<」右邊的數指定移動的位數, 高位丟棄,低位補0。例如: a<<4 指把a的各二進位向左移動4位。如a=00000011(十進制3),左移4位後為00110000(十進制48)。