Re: [問題] 位移

看板java作者 (骨頭)時間18年前 (2007/05/05 06:10), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《jnevil (宛如平凡的落葉)》之銘言: : public class work01 { : public static void main(String[] args) { : int a=-1; : int b=-1; : System.out.println(a>>>=31); : System.out.println(b>>=31); : System.out.println(); : } : } : 我爬文後,關鍵字"運算",看到了這個 : =============================================== : >>=這個運算子是代表:位元右移後指定數值給變數 : >>>=是代表:位元右移並補零再指定數值給變數 : =============================================== : 但為什麼 a>>>=31 是 1, a>>=31 是 -1 : 能否有高手能使用二進位表示告訴我,1 和 -1 是怎麼移又怎麼得到的嗎 QQ? : 被這個問題纏了一整晚 QQ 1.首先你要了解負數的表示法 這有幾種 可以參考這個網頁 ( http://dslab.ee.ncku.edu.tw/~tu/TuWeb2/logical/ch1/1-6.htm ) 了解負數怎麼表示之後就可以計算了 2.int 是 4 byte , 32 bit . 所以先把 -1 轉換成2補數型態 1111111111111111111111111111111 //32個1 3. a. >>= 31 就是把整個 binary 右調31格 也就是 1111111111111111111111111111111 //顏色是改變後的相對位置 但是實際上是沒有改變的 還是-1 b. >>>=31 不只是右移 還要補0 所以會變成 0000000000000000000000000000001 //黃色是補0的結果 這為甚麼是1 應該就不用我說了 -- 06:21 把bit跟byte寫反了, 已更正. -- I am a person, and I am always thinking . Thinking in love , Thinking in life , Thinking in why , Thinking in worth. I can't believe any of what , I am just thinking then thinking , but worst of all , most of mine is thinking not actioning... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.134.27.68 ※ 編輯: TonyQ 來自: 220.134.27.68 (05/05 06:14)
文章代碼(AID): #16Ewy_IT (java)
討論串 (同標題文章)
本文引述了以下文章的的內容:
問題
完整討論串 (本文為第 2 之 2 篇):
問題
文章代碼(AID): #16Ewy_IT (java)