1樓:崇尋巧
正負數在記憶體中通常以補碼形式儲存。
左移不分正負高位捨去,低位補0
右移時,低位捨去,對正數高位補0,對負數高位補1
c語言中為什麼左移不分符號數無符號數,而右移分呢??
2樓:手機使用者
因為在c語言標準中,只規定了無符號數的移位操作是採用邏輯移位(即左移、右移都是使用的邏輯左移和邏輯右移)。
而對於有符號數,其左移操作還是邏輯左移,但右移操作是採用邏輯右移還是算術右移就取決於機器了!(算術右移和邏輯右移的區別是:算術右移不右移符號位,即最高位,右移後前補0還是1取決於符號位的值;邏輯右移執行時將移動符號位,右移後前補0)
因此,乙個程式如果使用了有符號數的右移位操作,它就是不可移植的了。
3樓:
左移時是不區分無符號數的,而進行右移時也不區分是否是無符號,移進的值在最高位補0。
例如:0xff進行右移一位0xff>>1,其結果為0x7f,請參見以下**:
#include
int main()
執行結果為:a = 7f
4樓:10伯樂
計算機中存放的是二進位補碼錶示的,正數的補碼是本身,而負數的補碼是取反加1.
所以負數的補碼在求其真值是也是對其作取補運算。
左移、右移其實就是乘或除2,這個不影響符號,所以負數的右移補符號位,保證是負數。
這只是大道理,您自己推一下就很容易理解了。
5樓:網友
因為左移定義是,每個移出的位進入進位標誌,右邊填充0,無論是有符號數還是無符號數都這麼操作,這是規定。那麼,這樣的操作對有符號數和無符號數的結果都是一樣的,所以左移不分有符號數還是無符號數。
負數的位運算是怎麼算的,左移和右移會考慮符號位嗎?
6樓:
當然。負數右移高位補1,正數右移高位補0;負數、正數左移低位補0。
算術右移 是什麼?
7樓:網友
算術右移是將各位依次右移指定位數,然後在左側補0,算術右移(sar)是將各位依次右移指定位數,然後在左側用原符號位補齊。
比如,在組合語言中,對於算術右移,如果最高位為1,則補1,否則補0, 如將10000000算術右移7位,應該變成11111111,而邏輯右移7位,則不考慮符號位,變為00000001,這點就是算術右移和邏輯右移的區別。
在彙編中,可以用算術右移來進行有符號資料的除法。把乙個數右移n位,相當於該數除以2的n次方。
算術右移需要考慮符號位,右移一位,若符號位為1,就在左邊補1,;否則,就補0。
所以算術右移也可以進行有符號位的除法,右移,n位就等於除2的n次方。
例如,8位二進位數11001101分別右移一位。
邏輯右移就是[0]1100110
算術右移就是[1]1100110
一、對於有符號數 int
正數,左移直接丟棄最高位,在低位補對應個數的0;
正數,右移直接丟棄最低位,在高位補對應個數的0;
負數,左移直接丟棄最高位,在低位補對應個數的0;
負數,右移直接丟棄最低位,在高位補對應個數的1;
二、對於無符號數 unsigned int
左移直接丟棄最高位,在低位補對應個數的0;
右移直接丟棄最低位,在高位補對應個數的0,即使最高位原來是1。
8樓:山水阿銳
算術右移指帶符號移動,並且是一位一位一次來的。
110110011是-10110011前面的第乙個1是符號位那麼第一次移位後數字也應該是-的,所以移位後前面補的是符號位1
連起來就是111011001,同樣的道理再移一次就是111101100。
9樓:三葉草
01001010 移成 00010100
10010100 移成 10101000
最高位因為是符號位,所有移位後的數與原數相同其它各位向右移一位,末位補0
10樓:王沛務開
計算機是用補碼錶示的,用八位補碼錶示-5是11111011,右移一位是11111101,把這個補碼寫成原碼錶示就是10000011,顯然,這個數是-3.
11樓:辛清婉零人
右移就是指忽略最右邊一位,然後整體向右平移,在首位補上010000010變為。
12樓:枝娥
將右屬第四個塗上你喜歡的顏色。
二進位數左移和右移的規則弄不清出,求高人解答~
13樓:惠山楣
左移 右移。
原碼 補0 符號位不變 補0 如10010->10001
反碼 正數補0負數補1 正數補0負數補1
補碼 補0 正數補0 負數補1 就是補符號位。
移碼同補碼。
以上都是算術移位規則,邏輯移位則不考慮符號位了。
14樓:網友
左移什麼都不會補1,右移負數會補1就是符號位。
在c++位運算裡什麼是左移位和右移位
15樓:匿名使用者
移位操作在程式設計中,位操作運算子的一種。
1.在c++中,移位運算子有雙目移位運算子:《左移)和》(右移)。移位運算子組成的表示式也屬於算術表示式,其值為算術值。
2.左移運算是將乙個二進位位的運算元按指定移動的位數向左移位,移出位被丟棄,右邊的空位一律補右移運算是將乙個二進位位的運算元按指定移動的位數向右移動,移出位被丟棄,左邊移出的空位或者一律補0,或者補符號位,這由不同的機器而定。在使用補碼作為機器數的機器中,正數的符號位為0,負數的符號位為1。
16樓:匿名使用者
左移位就是比如二進位 0000 1011 左移一位就是 0001 0110,相當於乘2
右移位類似, 0000 1011 右移一位就是 0000 0101,相當於除2
左移運算子的意義規則
17樓:我恨褲兜遱逖埓
左移運算子就是在二進位的基礎上對數字進行。
平移。按照平移的方向和填充數字的規則分為三種:《左移)、>帶符號右移)和》(無符號右移)。
在移位運算時,byte、short和char型別移位後的結果會變成int型別,對於byte、short、char和int進行移位時,規定實際移動的次數是移動次數和32的餘數,也就是移位33次和移位1次得到的結果相同。移動long型的數值時,規定實際移動的次數是移動次數和64的餘數,也就是移動66次和移動2次得到的結果相同。
三種移位運算子的移動規則和使用如下所示:
(左移)運算規則:按二進位形式把所有的數字向左移動對應的位數,高位移出(捨棄),低位的空位補零。
語法格式:需要移位的數字 《移位的次數。
例如: 3 <<2,則是將數字3左移2位。
計算過程:3 <<2 首先把3轉換為二進位數字0000 0011,然後把該數字高位(左側)的兩個零移出,其他的數字都朝左平移2位,最後在低位(右側)的兩個空位補零。則得到的最終結果是0000 1100,則轉換為十進位是12。
數學意義:在數字沒有溢位的前提下,對於正數和負數,左移一位都相當於乘以2的1次方,左移n位就相當於乘以2的n次方。
(帶符號右移)
運算規則:按二進位形式把所有的數字向右移動對應的位數,低位移出(捨棄),高位的空位補符號位,即正數補零,負數補1。
語法格式:需要移位的數字 >>移位的次數。
例如11 >>2,則是將數字11右移2位。
計算過程:11的二進位形式為:0000 1011,然後把低位的最後兩個數字移出,因為該數字是正數,所以在高位補零。則得到的最終結果是0000 0010。轉換為十進位是2。
數學意義:右移一位相當於除2,右移n位相當於除以2的n次方。這裡是取商哈,餘數就不要了。
>(無符號右移)
運算規則:按二進位形式把所有的數字向右移動對應位數,低位移出(捨棄),高位的空位補零。對於正數來說和帶符號右移相同,對於負數來說不同。 其他結構和》相似。
c 語言不太理解說的右移和左移的情況。能舉個例子解釋下那嗎。就是左移動高位低位。右移無符號。負整數
18樓:網友
左移時左端高位移出的部分捨棄是啥意思。還有右移時負整數高位補一是啥意思??
解答:正數在儲存的時候就是原數字,但是負數要採取補碼的方式儲存。這樣,負數的最高位就是1。
比如:對於32位的系統int為四個位元組,共32位,數字1就是0xffffffff(即-1的補碼,最高位是1)。
對於0xffffffff 已經佔滿的32個位,左移時,高位全部捨去不要,低位補0.比如左移4位就變成 0xfffffff0。但是右移就不一樣了,右移時,低位捨去,高位補1,(原來的最高位就是1),所以右移四位還是 0xffffffff ,而不是 0x0fffffff。
19樓:網友
1>> 就是0001 右移位 變成 0000 就變成0了。
1<< 就是0001 左移位 變成0010 變成2 了。
求j**a大神告訴我 j**a中無符號左移或右移 是怎麼回事呢? 特別是負數是怎麼回事?謝謝了
20樓:匿名使用者
有符號就帶符號、沒符號就補0。
轉成2進位,或者自己用筷子擺幾下,就清楚了。
借個別人寫好的了。
右移》1);結果是-2,為什麼會是-2呢?下面我們來看一下。;得到-3的16進製為fffffffd(此為-3的補碼,計算機中負數用補碼錶示).轉換成2進製為。
右移一位為。
顯而易見此為-2補碼。
左移<<1);左移相對來說比較簡單。1111 1111 1111 1111 1111 1111 1111 1101左移一位為1111 1111 1111 1111 1111 1111 1111 1010,其為-6的補碼。
無符號右移》1);1111 1111 1111 1111 1111 1111 1111 1101無符號右移,高位補0,01111 1111 1111 1111 1111 1111 1111 1110,其為2147483646的原碼。
梗什麼意思,一個梗什麼意思?
經常上網的朋友會發現,網路上總是隔一段時間就會傳出一些網路詞,而且越來越莫名其妙,讓人摸不著頭腦,比如前1個月的香菇 藍瘦,一下子紅遍網。今天有個同事問我梗是什麼意思?下面就來給大家科普下 梗是什麼意思 梗是什麼意思?梗有 故事情節 橋段 小段子 的意思,一般而言具有典型性,所以衍生出來的詞有 老梗...
學年是什麼意思,一個學年是什麼意思
中國規定,在校期間 可以是小學,初中,高中,大學,研究生 滿一年,一般是秋季9月到次年9月 包含寒暑假 為一學年。一般說來,過一學年,升一個年級。目前中國的小學六學年,初中三學年,中學加專科 中專 五學年,高中三學年,大學本科四學年,大學專科 大專 三學年,碩士研究生三學年 少數二學年 博士研究生二...
幾個油是什麼意思,一個油是什麼意思
百公里幾個油的意思就是車輛每跑一百公里時所耗費的油量。通常我們在在自己的汽車耗不耗油就是看百公里會有幾個油。數字越高代表越耗油。比如每百公里耗費8升油就是百公里8個油。不同的駕駛環境,耗油量也會有所不同,如高速公路與市區公路,油耗就會出現較大的差異。意思就是百公里油耗多少升。幾個油這句話具體的意思就...