當前位置:首頁 » 編程語言 » c語言位段的使用

c語言位段的使用

發布時間: 2025-03-16 10:00:38

『壹』 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-16 17:04:00 瀏覽:901
促銷演算法模型 發布:2025-03-16 16:56:55 瀏覽:93
線程非同步java 發布:2025-03-16 16:51:52 瀏覽:259
軟體編程有哪些 發布:2025-03-16 16:46:07 瀏覽:480
最近上傳91 發布:2025-03-16 16:46:03 瀏覽:705
珍珠台編程 發布:2025-03-16 16:40:25 瀏覽:900
伺服器如何連接寬頻 發布:2025-03-16 16:31:19 瀏覽:657
電腦硬體消息查詢腳本 發布:2025-03-16 16:22:39 瀏覽:867
寶馬五系降價取消了哪些配置 發布:2025-03-16 16:09:41 瀏覽:241
學班java 發布:2025-03-16 16:09:00 瀏覽:599