C語言位運算按位與
① C語言的按位與、或、非、異或都什麼意思。有什麼用
這些是位操作運算符:參與運算的量,按二進制位進行運算。
在計算機中,數據都是以二進制數形式存放的,位運算就是指對存儲單元中二進制位的運算。C語言提供6種位運算符。
包括位與(&)、位或(|)、位非(~)、位異或(^)、左移(<<)、右移(>>)六種。
位運算符 & |~<< >> ∧ 按優先順序從高到低排列的順序是:
位運算符中求反運算「~「優先順序最高,而左移和右移相同,居於第二,接下來的順序是按位與 「&「、按位異或 「∧「和按位或 「|「。順序為~ << >> & ∧ | 。
(1)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,y相與的結果。
代碼寫作x&y
先將x與y分別寫成二進制bit形式~~
例如計算10&30
10二進制為1010
30為11110
然後從低位開始,每個bit分別作與運算~~
其中bit的與運算,除了1&1=1外,其餘組合結果均為0
故10&30=01010,即1010。。。
③ 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語言 字元串 按位與
// 編寫的以高位相與的函數:
char*str;
voidstringv(char*str1,char*str2)
{
inti;
for(i=0;str1[i]!='