本文目錄一覽:
- 1、c語言 按位非運算
- 2、C語言的邏輯運算和按位運算怎麼區分?
- 3、c語言中為什麼會定義按位非、按位與、等等這種計算方法有什麼作用?
- 4、C語言中按位或,與,非是怎麼用的,怎麼運算?
- 5、C語言的按位與、或、非、異或都什麼意思。有什麼用
- 6、求c語言,與,或,非運算函數
c語言 按位非運算
記住:
正數的補碼=正數 本身
負數的補碼 = 本身去反 +1
///////////////////////
x=13 的補碼00001101
~x : 11110010
第一位是符號位,因為x聲明為int,所以,第一位是1,表明是負數
其他位:
1110010
取反
0001101 =13
+1
0001110=14
結果 是 -14(符號為為負數)
注:
如果x是unsigned int
那麼 ~x=4294967282
/////////////////////////
還有一個按位右移運算,假如是00001101,右移後結果是00000011么?
如果是右移動 2 位的話,結果是00000011
過程:
00001101
右移1位
00000110 丟失 1
右移2位
00000011 丟失 0
結果 ——00000011
C語言的邏輯運算和按位運算怎麼區分?
可以按照符號的不同來區分,C語言中邏輯運算符和按位運算符的符號是不一樣的
C語言中提供了三種邏輯運算符:(與運算),
||(或運算),
!(非運算)
與運算符()和或運算符(||)均為雙目運算符。具有左結合性。非運算符(!)為單目運算符,具有右結合性
C語言提供了六種位運算符:
|
^
~
按位與
按位或
按位異或
取反
左移
右移
c語言中為什麼會定義按位非、按位與、等等這種計算方法有什麼作用?
比如圖像處理經常遇到需要按bit進行操作的代碼段,如果c不提供對bit進行操作的關鍵字或函數的話,那就需要鏈接彙編等低級語言了。比較麻煩。c保留了這類的操作,對於編程人員是好事,同時程序員也可以通過c直接對硬件低層進行操作。
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成為掩碼。
C語言的按位與、或、非、異或都什麼意思。有什麼用
這些是位操作運算符:參與運算的量,按二進制位進行運算。
在計算機中,數據都是以二進制數形式存放的,位運算就是指對存儲單元中二進制位的運算。C語言提供6種位運算符。
包括位與()、位或(|)、位非(~)、位異或(^)、左移()、右移()六種。
位運算符 |~ ∧ 按優先級從高到低排列的順序是:
位運算符中求反運算「~「優先級最高,而左移和右移相同,居於第二,接下來的順序是按位與 「「、按位異或 「∧「和按位或 「|「。順序為~ ∧ | 。
擴展資料:
例:設二進制數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語言
求c語言,與,或,非運算函數
按位「與」、「或」和「非」運算是C/C++中標準運算符,不需要另外編寫函數。
與運算: c = a b;
或運算: c = a | b;
非運算: ~a;
非運算: ~b
另外,!是邏輯運算符,對於a,如果a 為 0,!a = 1,如果a 不為 0,則!a = 0。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/181547.html