c語言中按位與按位或
『壹』 c語言問題,按位與、按位或、按位異或、按位取反,解釋下。
先說一下布爾值的與、或、異或、反運算:
與運算,兩者都為真計算結果為真,反之為假:
1
&
1
=
1,1
&
0
=
0,0
&
1
=
0,0
&
0
=
0;
或運算,至少其一都為真計算結果為真,反之為假:
1
|
1
=
1,1
|
0
=
1,0
|
1
=
1,0
|
0
=
0;
異或運算,兩者不同為真,反之為假:
1
^
1
=
0,1
^
0
=
1,0
^
1
=
1,0
^
0
=
0;
取反運算,單目運算符:
~1
=
0,~0
=
1;
以上例子
1
代表真,0
代表假。
按位運算就是將二進制位的每一位進行如上計算。
如
2
|
5,轉換為二進制(以
1
位元組
8
位為例):
00000010
|
00000101,每個二進制位分別進行或運算後得:
00000111
即
7。雖然
7
=
5
+
2
但不代表
2
|
5
=
2
+
5。
如:2
|
6
=
6,5
|
6
=
7,2
|
4
|
5
|
6
|
7
=
7。
同理,按位與運算
2
&
5
的結果為
0:
00000010
&
00000101
=
00000000
按位與運算
2
&
6
的結果為
2(二進制
00000010):
00000010
&
00000110
=
00000010。
同樣也能算出
2
^
6
的結果為
4(二進制
00000101):
00000010
^
00000110
=
00000100。
取反運算
~00000110
=
11111001。
當然,對一個數字進行取反運算結果是多少,還與該類型是有符號還是無符號,佔用的位元組大小等有關。上面的例子只是以一個位元組為例進行說明。
『貳』 c語言中按位與。。按位或什麼意思
位運算符C語言提供了六種位運算符:
& 按位與
| 按位或
^ 按位異或
~ 取反
<< 左移
>> 右移
按位與運算 按位與運算符"&"是雙目運算符。其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1 ,否則為0。參與運算的數以補碼方式出現。
例如:9&5可寫算式如下: 00001001 (9的二進制補碼)&00000101 (5的二進制補碼)00000001 (1的二進制補碼)可見9&5=1。
『叄』 C語言的按位與、或、非、異或都什麼意思
位運算符有:&(按位與)、|(按位或)、^(按位異或)、~ (按位取反)。
優先順序從高到低,依次為~、&、^、|
按位與運算有兩種典型用法,一是取一個位串信息的某幾位,如以下代碼截取x的最低7位:x & 0177。二是讓某變數保留某幾位,其餘位置0,如以下代碼讓x只保留最低6位:x = x & 077。
按位或運算的典型用法是將一個位串信息的某幾位置為1。如將要獲得最右4位為1,其他位與變數j原來其他位保持相同,可用邏輯或運算017|j;
按位異或運算的典型用法是求一個位串信息的某幾位信息的反。如欲求整型變數j的最右4位信息的反,用邏輯異或運算017^j,就能求得j最右4位的信息的反,即原來為1的位,結果是0,原來為0的位,結果是1。 交換兩個值,不用臨時變數,假如a=3,b=4。想將a和b的值互換,可以用以下賦值語句實現:
a=a^b; b=b^a; a=a^b;
取反運算常用來生成與系統實現無關的常數。如要將變數x最低6位置成0,其餘位不變,可用代碼x = x & ~077實現。
『肆』 C語言…按位與,按位或!
是按2進制代碼的同位進行運算。例如1010和1101這2個2進制數:
按位與為:
1010
1101
=
1000對應為同為1時是1,否則為0.
按位或為:
1010
1101
=
1111隻要同位的兩個全為零時得零,否則為1
『伍』 C語言的按位與、或、非、異或都什麼意思。有什麼用
這些是位操作運算符:參與運算的量,按二進制位進行運算。
在計算機中,數據都是以二進制數形式存放的,位運算就是指對存儲單元中二進制位的運算。C語言提供6種位運算符。
包括位與(&)、位或(|)、位非(~)、位異或(^)、左移(<<)、右移(>>)六種。
位運算符 & |~<< >> ∧ 按優先順序從高到低排列的順序是:
位運算符中求反運算「~「優先順序最高,而左移和右移相同,居於第二,接下來的順序是按位與 「&「、按位異或 「∧「和按位或 「|「。順序為~ << >> & ∧ | 。
(5)c語言中按位與按位或擴展閱讀:
例:設二進制數a是00101101 ,若通過異或運算a∧b 使a的高4位取反,低4位不變,則二進制數b是。
解析:異或運算常用來使特定位翻轉,只要使需翻轉的位與1進行異或操作就可以了,因為原數中值為1的位與1進行異或運算得0 ,原數中值為0的位與1進行異或運算結果得1。而與0進行異或的位將保持原值。異或運算還可用來交換兩個值,不用臨時變數。
如 int a=3 , b=4;,想將a與b的值互換,可用如下語句實現:
a=a∧b;
b=b∧a;
a=a∧b;
所以本題的答案為: 11110000 。
『陸』 C語言的按位與,或,非,異或都什麼意思.有什麼用
位運算符有:&(按位與)、|(按位或)、^(按位異或)、~ (按位取反)。
優先順序從高到低,依次為~、&、^、|
按位與運算有兩種典型用法,一是取一個位串信息的某幾位,如以下代碼截取x的最低7位:x & 0177。二是讓某變數保留某幾位,其餘位置0,如以下代碼讓x只保留最低6位:x = x & 077。
按位或運算的典型用法是將一個位串信息的某幾位置為1。如將要獲得最右4位為1,其他位與變數j原來其他位保持相同,可用邏輯或運算017|j;
按位異或運算的典型用法是求一個位串信息的某幾位信息的反。如欲求整型變數j的最右4位信息的反,用邏輯異或運算017^j,就能求得j最右4位的信息的反,即原來為1的位,結果是0,原來為0的位,結果是1。 交換兩個值,不用臨時變數,假如a=3,b=4。想將a和b的值互換,可以用以下賦值語句實現:
a=a^b; b=b^a; a=a^b;
取反運算常用來生成與系統實現無關的常數。如要將變數x最低6位置成0,其餘位不變,可用代碼x = x & ~077實現。
『柒』 C語言中按位與(&)運算符是什麼意思
是將二進制數按照位的對應相與,得到一個新的二進制數。1與0為0;1與1為1;0與0為0。
分析如下:
就是二進制的每一位相與。
比如:1010 0011& 0000 1111,結果為0000 0011。也就是與上0相當於把那位數清0,與上1相當於把那位保留。
(7)c語言中按位與按位或擴展閱讀:
1、按位與運算符"&"是雙目運算符。 其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1 ,否則為0。參與運算的數以補碼方式出現。
例如:9&5可寫算式如下: 00001001 (9的二進制補碼)&00000101 (5的二進制補碼) 00000001 (1的二進制補碼)可見9&5=1。 按位與運算通常用來對某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 運算 ( 255 的二進制數為11111111)。
『捌』 C語言中按位或,與,非是怎麼用的,怎麼運算
位運算符
C提供了六種位運算運算符;這些運算符可能只允許整型操作數,即char、short、int和long,無論signed或者unsigned。
&
按位AND
|
按位OR
^
按位異或
<<
左移
>>
右移
~
求反(一元運算)
按位與操作&通常用於掩去某些位,比如
n
=
n
&
0177;
使得n中除了低7位的各位為0。
按位或操作|用於打開某些位:
x
=
x
|
SET_ON;
使得x的某些SET_ON與相對的位變為1。
按位異或操作^使得當兩個操作數的某位不一樣時置該位為1,相同時置0。
應該區分位操作符&、|與邏輯操作符&&、||,後者從左到右的評價一個真值。比如,如果x為1、y為2,那麼x
&
y為0,而x
&&
y為1。
移位運算符<<和>>將左側的操作數左移或者右移右操作數給定的數目,右操作數必須非負。因此x
<<
2將x的值向左移動兩位,用0填充空位;這相當於乘4。右移一個無符號數會用0進行填充。右移一個帶符號數在某些機器上會用符號位進行填充(「算數移位」)而在其他機器上會用0進行填充(「邏輯移位」)。
單目運算符~對一個整數求反;即將每一個1的位變為0,或者相反。比如
x
=
x
&
~077
將x的後六位置0。注意x
&
~077的值取決於字長,因此比如如果假設x是16位數那麼就是x
&
0177700。這種簡易型式並不會造成額外開銷,因為~077是一個常數表達式,可以在編譯階段被計算。
作為一個使用位操作的實例,考慮函數getbits(x,p,n)。它返回以p位置開始的n位x值。我們假設0位在最右邊,n和p是正數。例如,getbits(x,4,3)返回右面的4、3、2位。
/*
getbits:
返回從位置p開始的n位
*/
unsigned
getbits(unsigned
x,
int
p,
int
n)
{
return
(x
>>
(p+1-n))
&
~(~0
<<
n);
}
表達式x
>>
(p+1-n)將需要的域移動到字的右側。~0是全1;將其左移n為並在最右側填入0;用~使得最右側n個1成為掩碼。