1樓:手機使用者
因為在c語言標準中,只規定了無符號數的移位操作是採用邏輯移位(即左移、右移都是使用的邏輯左移和邏輯右移)。
而對於有符號數,其左移操作還是邏輯左移,但右移操作是採用邏輯右移還是算術右移就取決於機器了!(算術右移和邏輯右移的區別是:算術右移不右移符號位,即最高位,右移後前補0還是1取決於符號位的值;邏輯右移執行時將移動符號位,右移後前補0)
因此,一個程式如果使用了有符號數的右移位操作,它就是不可移植的了。
2樓:
左移時是不區分無符號數的,而進行右移時也不區分是否是無符號,移進的值在最高位補0。
例如:0xff進行右移一位0xff>>1,其結果為0x7f,請參見以下**:
#include
int main()
執行結果為:a = 7f
3樓:10伯樂
計算機中存放的是二進位制補碼錶示的,正數的補碼是本身,而負數的補碼是取反加1.
所以負數的補碼在求其真值是也是對其作取補運算。
左移、右移其實就是乘或除2,這個不影響符號,所以負數的右移補符號位,保證是負數。
這只是大道理,您自己推一下就很容易理解了。
4樓:匿名使用者
因為左移定義是,每個移出的位進入進位標誌,右邊填充0,無論是有符號數還是無符號數都這麼操作,這是規定。那麼,這樣的操作對有符號數和無符號數的結果都是一樣的,所以左移不分有符號數還是無符號數。
左移賦值 有符號右移賦值 無符號右移賦值 分別什麼意思?請舉例說明,越詳細越好啊
5樓:匿名使用者
有符號數和無符號數,主要是將資料轉成2進位制後,第一位的意義,有符號數第一位為符號位,1表示負數,0表示整數。無符號數第一位都是0
c語言位移(左移右移有無符號)之後可以返回原值麼?
6樓:匿名使用者
左移右移並不會改變原值,例如
int a = 1;
a<<2;
printf("%d", a); //輸出還是1如果你問的是
int a=1;
a=a<<2;
a=a>>2;
那麼最終a的值還是1
但是如果溢位了就移不回來了
c語言中為什麼左移不分符號數無符號數,而右移分呢??
7樓:校和雅洪羨
因為在c語言標準中bai,只du規定了無符號數的移zhi位操作是採用邏輯dao移位(即左移、右移都是使回用的邏輯答左移和邏輯右移)。
而對於有符號數,其左移操作還是邏輯左移,但右移操作是採用邏輯右移還是算術右移就取決於機器了!(算術右移和邏輯右移的區別是:算術右移不右移符號位,即最高位,右移後前補0還是1取決於符號位的值;邏輯右移執行時將移動符號位,右移後前補0)
因此,一個程式如果使用了有符號數的右移位操作,它就是不可移植的了。
8樓:儲熠祖波
可能是書上印錯了
還有「而1左移2位也就是1乘以4等於4
也就是0000
1000
」這個好象是左移了3位了~~
9樓:闢歌韻商聽
計算機中存放的抄是二進位制補碼錶示的,正數的補碼是本身,而負數的補碼是取反加1.
所以負數的補碼在求其真值是也是對其作取補運算。
左移、右移其實就是乘或除2,這個不影響符號,所以負數的右移補符號位,保證是負數。
這只是大道理,您自己推一下就很容易理解了。
c語言怎麼實現無符號右移
10樓:匿名使用者
無符號數右移
直接用》就可以了
比如a>>2
就是右移兩位。
如圖C語言程式,這個定義無符號數a,但是賦了66666的負數,但是為什麼列印輸出也是負數
你好是這樣子的你是以無符號存放的沒錯 但是輸出無符號的格式是 u d是有符號整數輸出的格式 希望能幫助到你 d 格式 bai 輸出,就是把 數值du 轉換 為 有符號數 輸出zhi。unsigned int a 66666 內部是dao 0xfffefb96 按 無符號內 輸出 要用 格式 u.體會...
c語言中定義無符號整型變數有什麼作用
整型有無bai 符號 unsigned 和有符號 signed 兩種du型別,在預設情況下聲zhi明的dao整型變數都是有符號的型別 版char有點特別 如果需聲 權明無符號型別的話就需要在型別前加上unsigned。無符號版本和有符號版本的區別就是無符號型別能儲存2倍於有符號型別的資料,比如16位...
c語言中同或用什麼符號表示,c語言中「或者」用什麼符號表示?
c語言中不提供 同或 運算,似乎只有異或,異或得反就是同或 c語言中 或者 用什麼符號表示?c語言中,表示 或 有兩種 表示按位或 表示邏輯或 例如 c語言中 同或用什麼符號表示 c語言中不提供 同或 運算,似乎只有異或,異或得反就是同或 c語言中同或 異或怎麼表示 異或有專門的操作符 比如int ...