C語言中的位運算是幹什麼的,C語言中的位運算有什麼優點?

2021-03-21 23:31:19 字數 3699 閱讀 7619

1樓:

通常在遇到byte運算問題時要用.

例如gif image 檔案中的"螢幕定義塊"中的第5個位元組(byte) 是 "packed fields",

最高位1個bit是有無全域性調色盤標誌位.

接下來3個bit是分辯率

接下來1個bit是調色盤顏色是否安出現頻繁程度分過類的標誌位.

最低的3個bit是調色盤顏色表陣列大小.

unsigned char packed_fields;

int flag_g; // 標誌位的值int size; // 顏色表陣列大小

// 計算有無全域性調色盤標誌位的值:

flag_g = (int) ((packed_fields & 0x80) >> 7);

[用按位與,取出最高位,右移七位到個位數的位置.]// 如果有全域性調色盤,則 計算顏色表陣列大小,以便下一步動態分配調色盤rrggbb陣列:

if (flag_g == 1);

2樓:匿名使用者

1、右移被二除

2、奇偶校驗

3、ga**鏈變異

……還有等等等等我不知道的

3樓:匿名使用者

在底層程式設計時用得到吧,特別是對硬體操作的時候。現在的作業系統,以及硬體驅動,都會用到位運算的!高階程式設計用得就少了吧!~

c語言中的位運算有什麼優點?

4樓:匿名使用者

很多高階的動態規劃題目或者一些基礎的運算往往需要較高的執行效率和較低的空間需求,或者需要表示一些狀態集合,而位運算剛好能滿足這一切。很多的時候,恰當的位運算使用也能使程式變得更加簡潔和優美。

c語言中的位運算在程式設計中有什麼意義啊!

5樓:匿名使用者

特定情況下 計算方便,速度快

比如網路地址的計算,

ip1: 192.168.0.11

ip2: 192.168.0.51

mask: 255.255.255.0

資料分別用了4個位元組來表示,當你想計運算元網地址的時候就用 「mask 邏輯或 ip」 運算, 得出 ip1 和 ip2 屬於同一個子網,

當你想算這兩個地址自身的時候,就用 邏輯與 運算,如果用算數方法 速度慢 邏輯複雜

而且在微控制器的情況下,有的複雜算數指令不一定支援的很好,但是位運算,就是基本邏輯運算,是99.9999% 的晶片都支援的

6樓:使用者註冊中

貼近硬體的程式設計時用的多,比如說微控制器之類。

打個比方,如果你要用程式控制幾個燈泡的亮與滅,可以使用位運算,1亮0滅。

10101010=亮滅亮滅亮滅亮滅。想讓最後一個燈亮,那用位運算將該位--》置1(就是和1做「或運算」),就變成了10101011亮滅亮滅亮滅亮亮。

我只是形象的比喻了一下,一般沒這麼簡單的。

7樓:匿名使用者

當你用到了就知道是做什麼的了。

現在不好說!

8樓:偉春酒妍

一、位運算子c語言提供了六種位運算子:

&按位與

|按位或

^按位異或

~取反《左移

>>右移

1.按位與運算按位與運算子"&"是雙目運算子。其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1,否則為0。參與運算的數以補碼方式出現。

例如:9&5可寫算式如下:00001001(9的二進位制補碼)&00000101(5的二進位制補碼)00000001(1的二進位制補碼)可見9&5=1。

按位與運算通常用來對某些位清0或保留某些位。例如把a的高八位清0,保留低八位,可作a&255運算(255的二進位制數為0000000011111111)。

main()

2.按位或運算按位或運算子「|」是雙目運算子。其功能是參與運算的兩數各對應的二進位相或。只要對應的二個二進位有一個為1時,結果位就為1。參與運算的兩個數均以補碼出現。

例如:9|5可寫算式如下:00001001|00000101

00001101(十進位制為13)可見9|5=13

main()

3.按位異或運算按位異或運算子「^」是雙目運算子。其功能是參與運算的兩數各對應的二進位相異或,當兩對應的二進位相異時,結果為1。

參與運算數仍以補碼出現,例如9^5可寫成算式如下:00001001^0000010100001100(十進位制為12)

main()

4.求反運算求反運算子~為單目運算子,具有右結合性。其功能是對參與運算的數的各二進位按位求反。

例如~9的運算為:~(0000000000001001)結果為:1111111111110110

5.左移運算左移運算子「<<」是雙目運算子。其功能把「<<」左邊的運算數的各二進位全部左移若干位,由「<<」右邊的數指定移動的位數,

高位丟棄,低位補0。例如:a<<4指把a的各二進位向左移動4位。

如a=00000011(十進位制3),左移4位後為00110000(十進位制48)。6.右移運算右移運算子「>>」是雙目運算子。

其功能是把「>>」左邊的運算數的各二進位全部右移若干位,「>>」右邊的數指定移動的位數。

例如:設a=15,a>>2表示把000001111右移為00000011(十進位制3)。應該說明的是,對於有符號數,在右移時,符號位將隨同移動。

當為正數時,最高位補0,而為負數時,符號位為1,最高位是補0或是補1取決於編譯系統的規定。turboc和很多系統規定為補1。

main()

請再看一例!

main()

c語言中按位運算子有什麼用?

9樓:匿名使用者

可以直接對硬體操作,這是它的優勢之一,如果你是初學者,現在還體會不到,也碰不到

c語言中的位運算是怎麼判別的?

10樓:匿名使用者

|& 按位與 如果兩個相應的二

進位制位都為1,則該位的結果值為1,否則為0| 按位或

專 兩個相應的二進位制屬位中只要有一個為1,該位的結果值為1^ 按位異或 若參加運算的兩個二進位制位值相同則為0,否則為1~ 取反 ~是一元運算子,用來對一個二進位制數按位取反,即將0變1,將1變0

<< 左移 用來將一個數的各二進位制位全部左移n位,右補0例如:若a=15,即00001111(2),左移2位得00111100(2)。>> 右移 將一個數的各二進位制位右移n位,移到右端的低位被捨棄,對於無符號數,高位補0。

例: a的值是八進位制數113755:

a:1001011111101101 (用二進位制形式表示)a>>1: 0100101111110110 (邏輯右移時)a>>1: 1100101111110110 (算術右移時)

c語言中「按位運算」的應用都有哪些

11樓:阿冬

具體應用要看你如何設計演算法。

比較常見能夠用上位運算的有:判斷

整數的奇偶性、ip地址的網段判斷、整數擴大或縮小2的n次方、把二進位制數字的某一位設定為0或者1,判斷二進位制數字的某一位是否為0或者1,等等。

c語言中位運算

12樓:匿名使用者

0110101

1011001

0010001

結果不是1,是上面這個,但是可以說結果是非0

c語言中的位運算子中 按位取反 是怎麼運算的

使用 按位取反運算的時候,計算機會將運算元所對應的二進位制表示式的每一版 個位進行取反權計算,取反後所得到的值就是 按位取反的運算結果。例如,假如計算機是32位的,接下來要計算 5的值,計算過程如下 5 的二進位制表示式為 0000 0000 0000 0000 0000 0000 0000 010...

C語言中的初等運算子有哪些c語言中有哪些運算子,各有什麼功能?

1級 左結合 圓括號 下標運算子 指向結構體成員運算子 結構體成員運算子。2級 右結合 邏輯非運算子 按位取反運算子 字首增量運算子 字首減量運算子 正號運算子 負號運算子 型別 型別轉換運算子 指標運算子 地址運算子 sizeof長度運算子。3級 左結合 乘法運算子 除法運算子 取餘運算子。4級 ...

c語言中的input是什麼C語言中的input是什麼

input a,b,c是你再螢幕上看到的 字 input是輸入的意思,就是提醒你要你輸入a,b,c input 是你再螢幕上看到的 字 input是輸入的意思,就是提醒你要你輸入的內容 沒有,裡面你願意添什麼都可以。printf 只不過把 裡面的東西輸出到螢幕上 input就是輸入的意思 不加是沒關...