關於C語言左移右移的問題,關於C語言左移右移的問題

2021-03-04 06:28:34 字數 4023 閱讀 8409

1樓:我瓦解的精彩

hbyte_later = hbyte << 8; //這裡並沒有使hbyte成為0!!而是hbyte_later=0

0100 1010 //這是4a的二進位制

1000 0000 //這是80的二進位制

4a左移8位

0100 1010 0000 0000 //對應的10進製值為18944,且80對應的10進製為127

/**18944+127為什麼不能等於19072?

*/這次答題,這麼用心,題主還是多給點分吧

c語言 左移 右移的問題 << 或 >>

2樓:匿名使用者

左移 右移不會修改a本身

a=ox32 (16進製制) 0011 0010b=a<<2

這個時候b=1100 1000 對

那麼此時a=0011 0010

繼續c=a<<2

請問c是在原來a的初值(ox32)上移動

這個時候c=1100 1000

3樓:圍城

b=a<<2

這個時候b=1100 1000 對!

那麼此時a=0011 0010 沒變

接著c=a<<2

c是在原來a的初值上移動,因為a沒變

c=b=1100 1000

最後c=b=1100 1000

a=0011 0010

4樓:匿名使用者

a << 2 是不影響a 的值的,就像a +1不會把a值加1一樣 。

a << 2只是乙個表示式,返回的是表示式計算得到的值,其中並沒有賦值(『=』)操作啊。

關於c語言的左移(<<)和右移(>>)

5樓:匿名使用者

左移比較簡單,右邊補0(移幾位就補幾個0),左邊丟掉。

右移比較複雜,右移分兩種:

(1)邏輯右移,左邊補0(移幾位補幾位),右邊移出去的丟掉。

(2)算術右移,左邊補最高位(即原來的最高位是0就補0,是1就補1,因為最高位代表符號,這樣可以保證負數不會變成正數),右邊丟掉。

6樓:我不知道啊啊

可以定義乙個中間變數暫存要被移出去的位,正常移位之後再或上這個中間變數即可~

c語言中的左移和右移?

7樓:匿名使用者

移位操作符的兩個運算元必須是整型的。整個移位表示式的值的型別也是整型的,而且,左移位操作符與右移位操作符的運算並不對稱。

8樓:匿名使用者

0111右移一位是把最後一位的1去掉,左邊補個0,得0011,轉換為十進位制是3,這是正確的。並不等同於除以2

9樓:月影低徊

移位只是對int型進行的操作。如果按是int型的計算,結果是正確的 。

10樓:溫啟勇思

左移就是把二進位製數向左移動,右邊補0,0的二進位製全是0,左移之後右邊再補0,移5和移6沒區別

《後面的數字表示移多少位

c語言中關於左移<<運算子的問題

11樓:可愛小爬爬

原因:第乙個k<<1只是表示k左移一位,但是這個運算結果並沒有給k而是依舊儲存在計算機cpu中的運算器中,同時你是用%d將這個結果列印出來,用%d格式表示把這個結果看成了int型,即型別擴大為int型,k<<1相當於2*k,在int型中65534沒有出界,所以就是這個結果。

第二個j<<=1;等價於j=j<<1;你看運算的結果給了j,而j是short int型,所以此時j=1111111111111110(最後一位為補進的0),而short int 最多是16位,這樣它的最高位為1,所以是負數,這是個補碼,其原碼為-(1111111111111110-1)按位取反,即為-0000000000000010=-2,最後用%d列印出的就是這個結果

c語言中左移運算子的問題

12樓:

void main()

void main()

13樓:樸丹樊鳥

a沒有變啊,b=a

<<3的意思是把a左移後的結果賦值給b就像b

=a+3;

b的值是a+3但是a本身沒有加3的!

14樓:匿名使用者

#include"stdio.h"

void main()

#include"stdio.h"

void main()

15樓:

char ch='e'; 十六進位制0x65'e' 等於 二進位制 0110 0101

ch=ch<<4;

左移4位 得 二進位制 0101 0000

(高位0110 溢位, 自動丟失)

賦還到ch裡.

二進位制 0101 0000 是 p, 十六進位制 0x50#include

void main()

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

16樓:非常可愛

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

17樓:多xdl點事

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

演示**:

#include

int main()

程式執行結果:

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

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

18樓:匿名使用者

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

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

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

19樓:匿名使用者

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

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

20樓:

右移,除以2

左移,乘以2

21樓:rr子騰

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

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

22樓:匿名使用者

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

c語言左移右移的問題或,C語言左移右移的問題或

左移 右移不會修改a本身 a ox32 16進製制 0011 0010b a 2 這個時候b 1100 1000 對 那麼此時a 0011 0010 繼續c a 2 請問c是在原來a的初值 ox32 上移動 這個時候c 1100 1000 b a 2 這個時候b 1100 1000 對!那麼此時a ...

C語言中關於左移運算問題,c語言中關於左移運算子的問題

a沒有變啊,b a 3的意思是把a左移後的結果賦值給b 就像 b a 3 b的值是a 3但是a本身沒有加3的!a 3 不會改變 a 的值。c中只有 運算子會改變變數的值,其他不會 之類不算 左移運算子不是 運算子,本身是不會改變的呀。c語言中關於左移 運算子的問題 原因 第乙個k 1只是表示k左移一...

關於C語言問題,關於C語言的問題

迴圈3次 5成立,結果 x 1,y 4,z 2。5成立,結果 x 2,y 3,z 1。5成立,結果 x 3,y 2,z 0。5失敗且不再執行 右側的 x,退出迴圈。所以最後結果是x 3 y 2 z 1,b正確。關於c語言的問題 巨集定義與賦值不同,而是字串的帶入,因此參與計算時要特別注意計算的優先順...