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 |