Discussion:
[問題] 位移
(时间太久无法回复)
宛如平凡的落葉
2007-05-04 21:10:45 UTC
Permalink
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

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.201.15.73
骨頭
2007-05-04 22:14:55 UTC
Permalink
※ 引述《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)
继续阅读narkive:
Loading...