㈠ c語言中的右移運算會自動的在高位補零嗎。怎麼辦
一般情形下是補零,但在處理有符號數的時候會因計算機系統(System)的不一樣而不一樣。有符號數高位是零,則右移時高位補零;假如是負數,即高位是1,那麼,有得系統(System)會移入1,稱算術右移,有的會移入0,稱邏輯右移。
turbo
C是算術右移。
㈡ C語言中-5按位右移2位為什麼是-2啊
計算機中存的是補碼
(以8位為例)
-5 原碼為 1 000 0101
反碼為: 1 111 1010
補碼為: 1 111 1011 這就是-5的補碼
按位右移2位,則變成: 1 111 1110 這是-2的補碼
㈢ C語言問題,在位運算中,操作數每右移一位,其結果相當於什麼若左移1位,其結果相當於什麼
每右移一位就是除以2,左移一位就是乘以2。C語言中,數字是二進制存儲的,左移和右移就是變化為2的指數形式。
演示代碼:
#include<stdio.h>
int main(){
int i = 2;
printf("i的值為%d ",i);
printf("i向右一位後的值為:%d ",i>>1);
printf("i向左一位後的值為:%d ",i<<1);
return 0;
}
程序運行結果:
擴展程序
C語言中,移位運算符組成的表達式也屬於算術表達式,其值為算術值。左移運算是將一個二進制位的操作數按指定移動的位數向左移動,移出位被丟棄,右邊移出的空位一律補0。
右移運算是將一個二進制位的操作數按指定移動的位數向右移動,移出位被丟棄,左邊移出的空位一律補0,或者補符號位,這由不同的機器而定。在使用補碼作為機器數的機器中,正數的符號位為0,負數的符號位為1。
㈣ c語言中右移是怎麼回事,移位後左邊補0嗎還是補最右邊的數,規則是什麼啊
這要看操作的是什麼數字,如果有有符號的,左邊以符號位(即最高為)補齊,否則以0補齊
㈤ 關於C語言的位運算的問題
第一題:
如果書本上真是那個意思,那就是它的錯誤。
這個程序關鍵的是這幾行代碼:
b=a>>3; //你寫的是4,估計是抄錯了,應該是3,代表向右移3位。這樣從右數第4位就變成了右數第一位了
c=~(~0<<4); //這個才是關鍵,~0表示各個位都是1,再向左移4位,此時低4位是0,其他位是1,再取反以後,c的二進制數低4位是1,其他位是0
d=b&c; //b和c按位與,因為c的低4位是1,其他位是0,1&任何數=任何數,0&任何數=0.所以取到的就是b的低4位了。 也就是a的4-7位。
如果按照書本上歸納:從右面開始取m—n位,代碼如下:
b=a>>(m-1);
c=~(~0<<(n-m));
d=b&c;
第二題:
這個程序的功能其實就是將一個數的二進制位中的低n位,移動到它的高n位,相應的,原來的高16-n位也就變成了低16-n位了。這個就是它所謂的「循環移位」。
舉個例子:
a的二進制數:0110 1100 0011 1010
取n為4,則
b=a<<12; //b=1010 0000 0000 0000 只保留了a的低4位
c=a>>4; //c=0000 0110 1100 0011 低4位丟失,高4位補0
c=c|b; //此時按位或,c=1010 0110 1100 0011 實現了低4變成了高4位
明白了吧?
舉例說明補碼和反碼:
反碼好理解,就是取反,比如0110的反碼是1001.
補碼要分類。正數的補碼就是他的原碼。負數的補碼遵循規則"絕對值按位取反再+1"
下面舉例子:
8的補碼: 8的原碼:0000 1000。補碼仍然是0000 1000
-8的補碼:因為是負數,最高位為1,需要保留。而-8的絕對值如上,合在一起就是1000 1000.先按位取反:1111 0111,再+1: 1111 1000。這個就是-8的補碼了。
㈥ c語言中按位運算都是要用補碼計算嗎謝謝
&、|和^分別是與、或和異或運算符,都是將參加位運算的兩個數按照它們的二進制位進行運算。
<<和>>是左移和右移運算符,也是先將數據轉換成二進制,在進行移位。
~是取反運算符,對數據的二進制的相應位進行取反。例如:a的二進制是01101,b的二進制是10110(因為b是負數,所以要採用補碼),其中的第一位表示符號。
㈦ 關於C語言的左移(<<)和右移(>>)
左移比較簡單,右邊補0(移幾位就補幾個0),左邊丟掉。
右移比較復雜,右移分兩種:
(1)邏輯右移,左邊補0(移幾位補幾位),右邊移出去的丟掉。
(2)算術右移,左邊補最高位(即原來的最高位是0就補0,是1就補1,因為最高位代表符號,這樣可以保證負數不會變成正數),右邊丟掉。
㈧ c語言右移一位
想必 你是知道結果
是-1
因為 負數在 計算機 里是用補碼表示的(反碼 再+1)
如用八位 表示
-1 就 是 1111 1111
右移一位後還 1111 1111
㈨ c語言中位運算有那幾種原理分別是什麼
位與、位或、異或、取反、左移、右移等6種,位運算要求必須使用補碼形式計算。
位與:對應的二進制位上只要出現1個0,則當前位使用位與後的結果為0
位或:對應的二進制位上只要出現1個1,則當前位使用位與後的結果為另一個二進制位的值
異或:對應的二進制位相同,則異或結果為0,否則異或結果為1
取反:包括符號位在內,二進制位0變1,1變0
左移:右側補0,右移整數左側補0,負數左側補1
㈩ C語言中的右移運算會自動的在高位補零嗎
一般情況下是補零,但在處理有符號數的時候會因計算機系統的不同而不同。有符號數高位是零,則右移時高位補零;如果是負數,即高位是1,那麼,有得系統會移入1,稱算術右移,有的會移入0,稱邏輯右移。
turbo C是算術右移。