Re: 請問一個位元運算問題

看板Programming作者 (-858993460)時間14年前 (2010/12/03 03:41), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串8/13 (看更多)
※ 引述《modester@kkcity.com.tw (兄弟般的bf)》之銘言: : ※ 引述《LPH66.bbs@ptt.cc (-858993460)》之銘言: : > 是的 : > 10010110 : > + 00101101 : > ---------- : > 11000011 : > 最高位沒有進位出去 所以 carry flag 為 0 : > 最高位沒有發生 0+0 => 1 或 1+1 => 0 所以 overflow flag 也為 0 : > 結果的最高位是 1 所以 negative flag 為 1 : > 其實 carry 和 overflow 兩個 flag 直接以這個方式來判斷即可 : > 如果以正負數來判斷有時會搞混 : > 因為 carry flag 對應無號數的計算結果 : > 而 overflow flag 則是對應有號數的計算結果... : 你意思是說沒有第九位,所以overflow flag為0 : 第八位沒有進位(只是1+0),所以carry flag為0 : 進位只看最高位(第八位),其它位元不算嗎? : 又最高位為1,所以這個加法結果 : A. 若以有號數來看是-67 : B. 若以1補數來看是-60 : C. 若以2補數來看是-61 : 所以negative flag才為1? : 最後兩句話有點不懂... 如最早的那篇回文 現代電腦一律是 2 補數 所以是 C negative flag 單純就是看結果以有號數解釋時是不是負數而已 和 carry/overflow 無關 最後兩句話是在說 carry 和 overflow 兩個 flag 的: carry flag 是無號數相加溢出時設為 1 也就是偵測 180+89=269 >= 256 這種情形 10110100 => 180 + 01011001 => 89 ---------- 00001101 => 13 這種情形發生時 最高位會進位出去 所以 carry flag 就在這時設為 1 之所以叫 carry flag 是因為它會用在 multi-word 相加時用來記錄進位 overflow flag 則是有號數相加溢出時設為 1 也就是偵測 80+70=150 >= 128 或 (-80)+(-70)=-150 < -128 這種情形 這兩個例子是: 01010000 => 80 10110000 => -80 + 01000110 => 70 + 10111010 => -70 ---------- ---------- 10010110 => -106 01101010 => 106 由於這種情形發生時 最高位會發生符號改變 因此 overflow flag 就會在這個時候設為 1 這樣應該有回答到你的問題... -- "LPH" is for "Let Program Heal us".... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.30.137

12/03 17:19, , 1F
有號數溢位:正+正=負or負+負=正
12/03 17:19, 1F
文章代碼(AID): #1C-6Rci8 (Programming)
討論串 (同標題文章)
文章代碼(AID): #1C-6Rci8 (Programming)