看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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
ledia:implementation dependent 04/03 13:34
purpose:sign extend 的關係吧。狗屎的 ideone 很難連,直接貼就好 04/03 13:52
purpose:http://203.64.187.42/99-b/asm-99b/f8-7.gif 我錯了 04/03 14:18
purpose:應該是有號 type 就做 sar sal 無號就做作 shr shl 04/03 14:19
抱歉 我補一下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)
LPH66:purpose 提到的 shr sar 可參照 #1C_YjxOa 04/03 15:41
tropical72:回答另一個問題,primer c++ 4e, 5.3 , 取決於編譯器。 04/03 15:43
tropical72:補一下,上面指的是,有號數右移,singed bit 處理. 04/03 15:45
x000032001:原來是這樣 感謝@@ 04/03 15:47
purpose:LPH66 前輩實在太強大了,解答無數問題 04/03 16:30
angleevil:LPH66真的很強 04/03 16:55
VictorTom:推L大:) 04/04 10:53
red0210:不過我還是搞不太懂 這樣往回補的意義在哪? 04/04 16:37
purpose:+4 做算數移位後變+2,而 -4 因為有回補,所以能夠變 -2 04/04 17:25
red0210:對喔!! 原來如此!! 謝謝樓上!!!! 04/04 17:55