[問題] bitwise與負數

看板C_and_CPP (C/C++)作者 (打狗樣被狗咬)時間14年前 (2012/04/03 13:02), 編輯推噓8(806)
留言14則, 8人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) C::B 10.05 gcc4.5.1 問題(Question): bitwise在用於負數的時候 結果不如預期 0xFFFFFFFF >> 1 預期是0x7FFFFFFF 程式碼(Code):(請善用置底文網頁, 記得排版) http://ideone.com/5WO5L 補充說明(Supplement): 使用unsigned可以順利得到我想要的結果 但是用int出來的結果讓我蠻感興趣的 這代表在處理負數的時候會保留最左邊的位元嗎 在最下面一次移了4個bit 結果卻還是0xffffffff 所以可以推論編譯器是依次一個一個移動位元 而不是一次移四格再補1囉? 單純想知道這方面的問題是有standard還是編譯器自行決定的XD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.240.28.61

04/03 13:34, , 1F
implementation dependent
04/03 13:34, 1F

04/03 13:52, , 2F
sign extend 的關係吧。狗屎的 ideone 很難連,直接貼就好
04/03 13:52, 2F

04/03 14:18, , 3F

04/03 14:19, , 4F
應該是有號 type 就做 sar sal 無號就做作 shr shl
04/03 14:19, 4F
抱歉 我補一下code #include <iostream> using namespace std; int main() { int i,j; i=0x7fffffff; j=0xffffffff; for(int k=31;k--;i>>=1,j>>=1) cout << hex << i << "\t" << j << endl; cout << (j>>4) << endl; return 0; } output: 7fffffff ffffffff 3fffffff ffffffff 1fffffff ffffffff fffffff ffffffff 7ffffff ffffffff 3ffffff ffffffff 1ffffff ffffffff ffffff ffffffff 7fffff ffffffff 3fffff ffffffff 1fffff ffffffff fffff ffffffff 7ffff ffffffff 3ffff ffffffff 1ffff ffffffff ffff ffffffff 7fff ffffffff 3fff ffffffff 1fff ffffffff fff ffffffff 7ff ffffffff 3ff ffffffff 1ff ffffffff ff ffffffff 7f ffffffff 3f ffffffff 1f ffffffff f ffffffff 7 ffffffff 3 ffffffff 1 ffffffff ffffffff ※ 編輯: x000032001 來自: 123.240.28.61 (04/03 14:54)

04/03 15:41, , 5F
purpose 提到的 shr sar 可參照 #1C_YjxOa
04/03 15:41, 5F

04/03 15:43, , 6F
回答另一個問題,primer c++ 4e, 5.3 , 取決於編譯器。
04/03 15:43, 6F

04/03 15:45, , 7F
補一下,上面指的是,有號數右移,singed bit 處理.
04/03 15:45, 7F

04/03 15:47, , 8F
原來是這樣 感謝@@
04/03 15:47, 8F

04/03 16:30, , 9F
LPH66 前輩實在太強大了,解答無數問題
04/03 16:30, 9F

04/03 16:55, , 10F
LPH66真的很強
04/03 16:55, 10F

04/04 10:53, , 11F
推L大:)
04/04 10:53, 11F

04/04 16:37, , 12F
不過我還是搞不太懂 這樣往回補的意義在哪?
04/04 16:37, 12F

04/04 17:25, , 13F
+4 做算數移位後變+2,而 -4 因為有回補,所以能夠變 -2
04/04 17:25, 13F

04/04 17:55, , 14F
對喔!! 原來如此!! 謝謝樓上!!!!
04/04 17:55, 14F
文章代碼(AID): #1FUeHVXd (C_and_CPP)
文章代碼(AID): #1FUeHVXd (C_and_CPP)