作者TonyQ (骨头)
看板java
标题Re: [问题] 位移
时间Sat May 5 06:10:05 2007
※ 引述《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补数型态
111111111111111111111111111111
1 //32个1
3. a.
>>= 31 就是把整个 binary 右调31格
也就是
11111111111111111111111111111
11
//颜色是改变後的相对位置
但是实际上是没有改变的 还是-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)