① c語言的左移運算符
為什麼計算出來的數據了
二進制 1111 1110
1111 1101
1111 1011
估計樓主你的這些數據應該是p1的,而temp的值是
二進制 0000 0001
0000 0010
0000 0100
注:
~temp只是求反並不改變temp本身的值,
對temp向高位移,低位是補0的而不會把前面的1換到後面來,
② c語言左移問題
但左移概念是左邊去掉n個二進制位,右邊補n個零,但這是指原來的二進制數是「機器數」。就是如果使用unsigned char 來存儲這個數的話,就是這樣的。
例如:0001 0010(十進制為18)左移4位,
得到的應該是0010 0000(十進制32),但是18*16≡32(模256)
當左移左邊不去零,右邊單純補零的時候得到0001 0010 0000,這時候得到的恰好是
288=18*16,但這只是單純往左移了(「丟失」了移出的4位)
如果仍是存儲在unsigned char 中的話,就仍是0010 0000(十進制32)
用左移的時候194<<4,是1100 0010 0000,若仍是存儲在unsigned char 中的話,就仍是0010 0000,這就是溢出了。
③ c語言中位運算的左位移右位移都是什麼意思
假設0010
左移就是把二進制數向左移動,右邊補0,0的二進制全是0,左移之後右邊再補0。
0010<<2 就是1000 實際是做的*4。
1000>>2 計算 0010 實際做的是/4。
④ C語言左移
左移就是把二進制數向左移動,右邊補0,0的二進制全是0,左移之後右邊再補0,移5和移6沒區別
<<後面的數字表示移多少位
⑤ C語言中怎樣表示移位啊例如將某個值左移兩位
利用位操作:"<<"就是左移 ">>"就是右移
舉個例子:將a左移2位,然後賦給a
a<<=2 也即是a=a<<2
在C語言中左移1位,相當於乘2,右移相當於除2。
⑥ C語言中的左移和右移
左移就是把二進制數向左移動,右邊補0,0的二進制全是0,左移之後右邊再補0,移5和移6沒區別
<<後面的數字表示移多少位
⑦ C程序中,左移「<<」、右移「>>」 的具體用法是什麼
C語言中,「<<」為左移運算符,「>>」為右移運算符。
具體使用方法如下:
1、左移運算符(<<)
將一個運算對象的各二進制位全部左移若干位(左邊的二進制位丟棄,右邊補0)。
例:a = a << 2 將a的二進制位左移2位,右補0,
左移1位後a = a * 2;
若左移時舍棄的高位不包含1,則每左移一位,相當於該數乘以2。
2、右移運算符(>>)
將一個數的各二進制位全部右移若干位,正數左補0,負數左補1,右邊丟棄。
操作數每右移一位,相當於該數除以2。
例如:a = a >> 2 將a的二進制位右移2位。
左補0 or 補1 得看被移數是正還是負。
⑧ C語言數組怎麼左移
//用一個循環就可以實現數組的循環左移:
inti,n,m;//temp表示左移位數
inta[n];
for(i=0;i<n-m;i++)a[i]=a[i+m];//此時的數組個數為n-m
⑨ c語言數組左移
「 (a[PosOut] << 8) | 0x00ff」表示先把a數組中第PosOut位置的數值按位左移8位,再將得到的結果和0x00ff做邏輯或操作。例如,a[2]=3,用二進製表示是」11「,那麼它左移8位得到二進制」11 0000 0000「,再和0x00ff即」1111 1111「做邏輯或操作,得到二進制」11 1111 1111「也就是十進制的1023,即c[2]=1023。
c[0] = (1<<8)|0x00ff = 二進制的"1 0000 0000"和」1111 1111「進行邏輯或 = 二進制的」1 1111 1111「 = 十進制的511。
其他c[PosOut]也是類似的分析。
⑩ 關於C語言左移
1個int類型是2個位元組或4個位元組,你這里才8個bit位(1個位元組),符號位在最高位,所以你換成char類型試一試吧