c語言中位運算的左位移右位移都是什麼意思

2021-03-27 09:23:35 字數 6520 閱讀 5411

1樓:妹紙們的小傻瓜

假設0010

左移就是把二進位制數向左移動,右邊補

0,0的二進位制全是0,左移之後右邊再補0。

0010<<2 就是1000 實際是做的*4。

1000>>2 計算 0010 實際做的是/4。

位移位運算子是將資料看成二進位制數,對其進行向左或向右移動若干位的運算。位移位運算子分為左移和右移兩種,均為雙目運算子。第一運算物件是移位物件,第二個運算物件是所移的二進位制位數。

位移位運算子的運算物件、運算規則與結果、結合性如表2-16所示。

移位時,移出的位數全部丟棄,移出的空位補入的數與左移還是右移花接木有關。如果是左移,則規定補入的數全部是0;如果是右移,還與被移位的資料是否帶符號有關。若是不帶符號數,則補入的數全部為0;若是帶符號數,則補入的數全部等於原數的最左端位上的原數(即原符號位)。

具體移位規則如下所示。

位移位運算子的優先順序如下:

·算術運算子 優先於 位移位運算子 優先於 關係運算子

·位移位運算子是同級別的,結合性是自左向右

例如,設無符號短整型變數a為0111(對應二進位制數為0000000001001001),

則:a<<3 結果為01110(對應二進位制數為0000001001001000),a不變

a>>4 結果為04 (對應二進位制數為0000000000000100),a不變

又如,設短整型變數a為-4(對應二進位制數為1111111111111100),

則:a<<3 結果為-32(對應二進位制數為1111111111100000),a不變

a>>4 結果為-1(對應二進位制數為1111111111111111),a不變

2樓:夏末雪人

說的是《和》吧。

《是左移,右邊補零。比如a=a<<2,假如a=00011100b,左移以後就是01110000b.

>>是右移,無符號數左邊補零;有符號數正數補零,負數補1。

3樓:_小_蘇

0001 左移1位的話就變成 0010

右移1位 0000

c語言左位移運算子和右位移運算子是什麼意思,怎麼運算,舉個例子..

4樓:楓啦啦

位移運算子是左移"<<"和右移">>"

用處是進行位運算,在嵌入式中應用比較多.因為一般來說位運算執行速度快,所以在精確運算中會常用到.

舉個例子,你要除2,

用普通方法是 x/=2;是吧?

位運算的方法是 x>>=1; 右移一位,相當於除2了,效率更高(當然也是省略小數點的)

特別是進行大值之間的運算,就更能體現效率了

5樓:匿名使用者

就是把一個數轉化成二進位制再直接對他進行操作例如:45>>2 //45右移兩位45的二進位制為:101101

右移兩位就為: 001011

001011再轉化為十進位制為:11

所以45>>2= 11

左移運算子

45<<2

45的二進位制為:101101

左移兩位就為:10110100

10110100再轉化為十進位制為:180

所以45<<2=180

6樓:

左位移 <<

例如 a = 0x01; a<<= 2; 則結果a = 0x04;

a = 0x81; a<<= 1; 則 結果a = 0x02;

右位移例如 a = 0x80; a>>= 2; 則 結果a = 0x20;

a = 0x81; a>>= 1; 則 結果a = 0x40;

c語言的移位不是迴圈,空出來的會補0. 把上面的例子換成2進位制看看就很清楚了。

如果要迴圈移位的話,有專門的系統函式的。

7樓:匿名使用者

#include "stdio.h"

void main()

{int x=3;

int m=1;

int n=5;

printf("%d\n",x>>m);

printf("%d\n",x<將x轉換為2進製表示,然後右移1為,變成1

然後將x左移5位,這個你最好理解左右移位的意思

8樓:匿名使用者

就是一位一位來移動啊。

比如你的資料是x=0xaa, 二進位制就是1010 1010 是

如果執行了x=x<<1;就是左移一位,之後的x=0101 0100 就是這樣

c語言中右移是怎麼回事,移位後左邊補0嗎還是補最右邊的數,規則是什麼啊?

9樓:匿名使用者

這要看操作的是什麼數字,如果有有符號的,左邊以符號位(即最高為)補齊,否則以0補齊

10樓:匿名使用者

是1的話,右移左邊是補0還是補1就不確定了,跟編譯系統有關

建議你手動補0,以免出錯

11樓:匿名使用者

右移n位相當於乘2的n次方,移位後左邊補0

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

12樓:匿名使用者

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

c語言中「按位運算子」是什麼意思? 10

13樓:成都中公優就業

1、按位運算

bai符就是直接對整數

du在記憶體中的二進zhi制位進行操dao

作運算。比如專,&&運算本來是

屬一個邏輯運算子,但整數與整數之間可以用&進行運算。舉個例子,6的二進位制是110,11的二進位制是1011,那麼6 & 11的結果就是2,它是二進位制對應位進行邏輯運算的結果(0表示false,1表示true,空位都當0處理)。

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

& 按位與

| 按位或

^ 按位異或

~ 取反

<< 左移

>> 右移

c語言問題,在位運算中,運算元每右移一位,其結果相當於什麼?若左移1位,其結果相當於什麼?

14樓:非常可愛

1、右移,除以2右移n位除以2的n次方;

右移的概念和左移相反,就是往右邊挪動若干位,運算子是》;

右移對符號位的處理和左移不同,對於有符號整數來說,比如int型別,右移會保持符號位不變,例如:

inti=0x80000000;

i=i>>1;//i的值不會變成0x40000000,而會變成0xc0000000

2、左移,乘以2左移n位乘以2的n次方;

先說左移,左移就是把一個數的所有位都向左移動若干位,在c中用《運算子。例如:inti=1;

i=i<<2;//把i裡的值左移2位

左移就是:丟棄最高位,0補最低位

擴充套件資料

符號位向右移動後,正數的話補0,負數補1,也就是組合語言中的算術右移。同樣當移動的位數超過型別的長度時,會取餘數,然後移動餘數個位。

負數10100110>>5(假設字長為8位),則得到的是11111101

在c中,左移是邏輯/算術左移(兩者完全相同),右移是算術右移,會保持符號位不變。實際應用中可以根據情況用左/右移做快速的乘/除運算,這樣會比迴圈效率高很多。

15樓:多xdl點事

每右移一位就是除以2,左移一位就是乘以2。c語言中,數字是二進位制儲存的,左移和右移就是變化為2的指數形式。

演示**:

#include

int main()

程式執行結果:

擴充套件程式c語言中,移位運算子組成的表示式也屬於算術表示式,其值為算術值。左移運算是將一個二進位制位的運算元按指定移動的位數向左移動,移出位被丟棄,右邊移出的空位一律補0。

右移運算是將一個二進位制位的運算元按指定移動的位數向右移動,移出位被丟棄,左邊移出的空位一律補0,或者補符號位,這由不同的機器而定。在使用補碼作為機器數的機器中,正數的符號位為0,負數的符號位為1。

16樓:匿名使用者

左移乘二,右移除以2,都是整除,比如5>>15的二進位制表示是101

那麼右移一位之後是10就是2了,是整除的

左移的話就是在後面補一個零,相當於是乘以二那麼變成了1010,十進位制是10

17樓:匿名使用者

c語言問題,在位運算中,運算元每右移一位,其結果相當將左值除以2

若左移1位,其結果相當於將左值乘以2

18樓:

右移,除以2

左移,乘以2

19樓:rr子騰

左移n位運算元乘以2的n次方冪

右移n位運算元除以2的n次方冪

20樓:匿名使用者

10000001 <<1 ==>1000 0010 相當於指數加1

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

21樓:匿名使用者

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

比如網路地址的計算,

ip1: 192.168.0.11

ip2: 192.168.0.51

mask: 255.255.255.0

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

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

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

22樓:使用者註冊中

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

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

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

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

23樓:匿名使用者

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

現在不好說!

24樓:偉春酒妍

一、位運算子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語言中的位運算是幹什麼的,C語言中的位運算有什麼優點?

通常在遇到byte運算問題時要用.例如gif image 檔案中的 螢幕定義塊 中的第5個位元組 byte 是 packed fields 最高位1個bit是有無全域性調色盤標誌位.接下來3個bit是分辯率 接下來1個bit是調色盤顏色是否安出現頻繁程度分過類的標誌位.最低的3個bit是調色盤顏色表...

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

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

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

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