Topic: 有关<< 和 >> 为运算符的用法,谢谢。

  Print this page

1.有关<< 和 >> 为运算符的用法,谢谢。 Copy to clipboard
Posted by: jczjczjcz
Posted on: 2003-02-12 17:06

有关<< 和 >> 为运算符的用法,谢谢。

2.Re:有关<< 和 >> 为运算符的用法,谢谢。 [Re: jczjczjcz] Copy to clipboard
Posted by: ditty
Posted on: 2003-02-12 17:13

其实就是 X2 /2 !

3.Re:有关<< 和 >> 为运算符的用法,谢谢。 [Re: jczjczjcz] Copy to clipboard
Posted by: jczjczjcz
Posted on: 2003-02-12 17:22

那是什么意思?

4.Re:有关<< 和 >> 为运算符的用法,谢谢。 [Re: jczjczjcz] Copy to clipboard
Posted by: 阿熊
Posted on: 2003-02-12 19:30

就是除以2与乘以2的意思

5.Re:有关<< 和 >> 为运算符的用法,谢谢。 [Re: jczjczjcz] Copy to clipboard
Posted by: jczjczjcz
Posted on: 2003-02-13 09:31

还是不懂,举个例子吗!

6.Re:有关<< 和 >> 为运算符的用法,谢谢。 [Re: jczjczjcz] Copy to clipboard
Posted by: frankwg
Posted on: 2003-02-14 07:12

int i = 1;
i = i << 1;
// value of i equals to 2
// binary code of i is 00000000000000000001 (preifx with 31 zeros)
// all bits shift left 1 digit results in
// 00000000000000000000000000000000010 (prefix with 30 zeros)
// thus i equals to 2

i = 1;
i = i << 2; // value of i equals to 4

The >> operator makes all bits shift right to n digits.

7.Re:有关<< 和 >> 为运算符的用法,谢谢。 [Re: jczjczjcz] Copy to clipboard
Posted by: Janas
Posted on: 2003-03-28 00:16

右移運算子( >> )

右移運算子會將位元資料向右移動特定的位數,我們用下列的例子做說明:

class Bit {
public static void main(String[] args) {
int i = 0x00000010;
int ans;
System.out.println("before: " + i);
ans = i >> 1;
System.out.println("after: " + ans);
}
}
所得結果是
before : 16
after : 8

16 進位的 0x00000010 相當於是十進位的 16。而其 32 bits 的位元組態(bit pattern)為

0000 0000 0000 0000 0000 0000 0001 0000

將其位元組態往右移動一個 bit 後結果為:

0000 0000 0000 0000 0000 0000 0000 1000

其值會變成 0x00000008,相當於是十進位的 8。

來看另外一個例子,最顯著的地方是第一個位元,可讓我們瞭解位元位移的作用到底是如何:

class Bit2 {
public static void main(String[] args) {
int i = 0x10000010;
int ans;
System.out.println("before: " + i);
ans = i >> 1;
System.out.println("after: " + ans);
}
}

上面的例子中 16進位的數字 0x10000010 運算後所的結果為

before: 268435472
after: 134217736

以 16 進位的 0x10000010 而言, 相當於是十進位的268,435,472 ,其其 32 bits 的位元組態為

1000 0000 0000 0000 0000 0000 0001 0000 ,

將其位元組態往右移動一個 bit 後其結果為:

0100 0000 0000 0000 0000 0000 0000 1000

其值會變成16進位的 0x08000008,相當於是十進位的 134,217,736。

對負數做位移運算可能會導致不可預期的結果,因為用來做為識別符號的位元會向右移,即使仍然保持負數可是整個位元組態已經完全改觀了。下面有一個簡單的範例可以參考:

class Neg {
public static void main(String[] args) {
int i = 0x80000000;
int ans;
System.out.println("before: " + i);
ans = i >> 1;
System.out.println("after: " + ans);
}
}

結果為
before: -2147483648
after: -1073741824

指定給變數 i 的 16 進位數值 0x80000000 ,其位元組態為:

1000 0000 0000 0000 0000 0000 0000 0000

就 Java 的二進位補數(complement)標示法而言,這是 Java 最大的負整數。你可由上列程式的執行結果 before: -2147483648 得到驗證,這個值也符合 java.lang.Integer.MIN_VALUE 中的定義。現在將這個數值的位元組態往又位移一個位元,其結果仍會保持負數,最後的位元組態是:

1100 0000 0000 0000 0000 0000 0000 0000

這個結果和換算成十進位後就會和程式執行結果 after: -1073741824 吻合。

8.Re:有关<< 和 >> 为运算符的用法,谢谢。 [Re: jczjczjcz] Copy to clipboard
Posted by: jiangns3000
Posted on: 2003-03-28 14:29

<<:向左移位,右端填0
>>:向右移位,左端符号位不变
>>>:向右移位,左端填0


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923