當前位置:首頁 » 編程語言 » c語言位或和或

c語言位或和或

發布時間: 2025-03-17 21:53:56

① 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語言位運算符:與、或、異或、取反、左移和右移!

在C語言的世界裡,位操作符猶如二進制運算的瑞士軍刀,它們包括按位與(&)、按位或(|)、按位異或(^)、取反(~)、左移(<>),在處理二進制數據時展現出了強大的威力。</


按位與(&):</ 這個運算符如同一個精密的清零工具,通過與操作可以清零低位元組或保留特定位。例如,60與17的按位與運算結果為00110000與00001111,得出00111111,這在數據處理中極具實用價值。


按位或(|):</ 它代表邏輯「或」操作,當二進制位中有一個為1時,結果為1。例如,60與17按位或運算後得到00110000或00001111,等於00111111,用於設置標志或組合多個位。


按位異或(^):</ 這個操作符用於實現數據的交換,無需臨時變數。如a=3和b=4,通過a=a^b; b=b^a; a=a^b; 的序列操作,a最終變為4,b變為3,展示了異或的奇妙之處。


取反(~):</ 一元運算,它是整數二進制的反碼操作,如~77的計算結果為01000000,這對於理解負數在計算機中的表示有著重要意義。


左移(<<):</ 通過左移位操作,我們可以將數值的位向左移動指定的位數,如15左移兩位變為00111100,這在數據壓縮和倍增操作中非常常見。


右移(>>):</ 無符號數右移時,高位自動補0;而對於有符號數,右移可能會影響到符號位(算術或邏輯移位)。例如,無符號數右移會導致溢出為0,這是理解數據類型特性的關鍵點。


移位的微妙差別:</ 左移時,根據移位方式(邏輯或算術)的區別,可能會產生不同的結果。例如,a = 113755 (二進制) 右移1,Turbo C系統得到045766,而其他系統可能得到145766,這體現了不同環境下的行為差異。


位運算的賦值妙用:</ 如a &= b等價於a = a & b,a <<= 2等同於a = a << 2,這些操作簡化了代碼,提高了效率。


深入探索:</ 擁有10年開發經驗的老程序員分享,精心整理的C/C++學習資源與路線圖,無論是初學者還是進階者,都能從中找到適合自己的學習路徑,加速成為編程高手的進程。

③ C語言位運算

C語言提供的位運算: 運算符 含義
& 按位與
| 按位或
∧ 按位異或
∽ 取反
<< 左移
>> 右移 說明:橘激1。位運算符中除∽以外,均為二目(元)運算符,即要求兩側各有一個運算了量。2、運算量只能鍵含是整形或字元型的數據,不能為實型數據。 「按位與」運算符(&) 規定如下:0&0=0 0&1=0 1&0=0 1&1=1 例:3&5=?
先把3和5以補碼表示,再進行按位與運算。3的補碼: 00000011
5的補碼: 00000101 --------------------------------------------------------------------------------

&: 00000001 3&5=1 「按位或」運算符(|) 規定如下:0|0=0 0&1=1 1&0=1 1&1=1 例:060|017=?
將八進制數60與八進制數17進行按位或運算。 060 00110000
017 00001111 --------------------------------------------------------------------------------

|: 00111111 060|017=077 「異或」運算符(∧),也稱XOR運算符 規定如下:0∧0=0 0∧1=1 1∧0=1 1∧1=0 例:57∧42=?
將十進制數57與十進制數42進行按位異或運算。 57 00111001
42 00101010 --------------------------------------------------------------------------------

∧: 00010011 57∧42=19 「取反」運算符(∽) 規定如下:∽0=1 ∽1=0 例:∽025=?
對八進制數25(即二進制0000000000010101)按位求反。0000000000010101

1111111111101010 ∽025=177752 左移運算符(<<) 將一個數的二進位全部左移若干位,若高位左移後溢出,則舍棄,不起作用。 例:a=a<<2
將a的二進制數左移2位,右補0。
若a=15,即二進制數00001111,則a 00001111
↓ ↓
a<<1 00011110
↓ ↓
a<<2 00111100 最後a=60 右移運算符(>>) 將一個數的二進位全部右移若干位,低位移出部分舍棄。 例:a=a>>2
將a的二進制數右移2位,左補0。
若a=15,即二進制數00001111,則a 00001111
↓ ↓
a>>1 00000111
↓ ↓
a>>2 00000011 最後a=3位運算符與賦值運算符結合可以組成擴展的賦值運算符 如稿伍笑:&=,|=,>>=,<<=,∧= 例:a&=b相當於a=a&b a<<=2相當於a=a<<2不同長度的數據進行位運算 如果兩個數據長度不同(例如long型和int型)進行位運算時(如a&b,而a為long型,b為int型),系統會將二者按右端對齊。如果b為正數,則左側16位補滿0。若b為負,左端應補滿1。如果b為無符號整數型,則左端添滿0。位運算舉例
例:取一個整數a從右端開始的4∽7位 考慮如下:1、先是a右移4位,即a>>4 2、設置一個低4位全為0的數,即∽(∽0<<4) 3、將上面兩式進行與運算,即a>>4&∽(∽0<<4) 程序如下: main() {unsigned a,b,c,d;</p><p> scanf("%o",&a);</p><p> b=a>>4;</p><p> c=∽(∽0<<4);</p><p> d=b&c;</p><p> printf("%o\n%o\n",a,b);</p><p> } 結果:331↙ 331(a的值,八進制) 15 (d的值,八進制)例:循環移位。要求將a進行右循環移位。即a右循環移n位,將a中原來左面(16-n)位右移n位。現假設兩個位元組存放一個整數。如右圖。 考慮如下:1、先將a右端n位放到b中的高n位中,即:b=a<<(16-n) 2、將a右移n位,其左面高位n位補0,即c=a>>n 3、將c與b進行按位或運算,即c=c|b 程序如下: main() {unsigned a,b,c;int n:</p><p> scanf("a=%o,n=%d",&a,&n);</p><p> b=a<<(16-n);</p><p> c=a>>n;</p><p> c=c|b;</p><p> printf("%o\n%o",a,c);</p><p> } 結果:a=157653,n=3↙ 331(a的值,八進制) 15 (d的值,八進制)位段
所謂位段是以位為單位定義長度的結構體類型中的成員。 例:struct packed-data {unsigned a:2;</p><p> unsigned b:6;</p><p> unsigned c:4;</p><p> unsigned d:4;</p><p> int i;</p><p> }data;

熱點內容
社會腳本法定義 發布:2025-03-18 03:59:00 瀏覽:326
安卓擴展存儲空間 發布:2025-03-18 03:57:34 瀏覽:10
linuxat沒反應 發布:2025-03-18 03:56:51 瀏覽:581
怎麼看是多少位編譯器 發布:2025-03-18 03:47:32 瀏覽:660
solr索引存儲 發布:2025-03-18 03:46:52 瀏覽:330
縫合演算法 發布:2025-03-18 03:46:06 瀏覽:363
java遍歷二維數組 發布:2025-03-18 03:36:01 瀏覽:411
銳捷源碼 發布:2025-03-18 03:26:55 瀏覽:436
訴訟中止裁定後可否解壓 發布:2025-03-18 03:24:51 瀏覽:128
sqlserver全文搜索 發布:2025-03-18 03:23:58 瀏覽:715