數據加載中……
          移位運算符

          Java中有3個移位運算符

          左移: <<

          帶符號右移:>>

          無符號右移:>>>

          數 x x<<2 x>>2 x>>>2

          17 00010001 01000100 00000100 00000100

          -17 11101111 10111100 11111011 00111011

          看一下程序0x表示16進制。ffffffff表示-1

          public class test {

          ????public static void main(String[] args) {

          ????????int i=0xffffffff;

          ????????int c=i<<2;

          ????????System.out.println(i);

          ????????System.out.println(c);

          ????????}

          }

          輸出是-1和-4.這表示

          public class test {

          ????public static void main(String[] args) {

          ????????int i=0xffffffff;

          ????????int c=i<<2;

          ????????System.out.println(Integer.toHexString(i));

          ????????System.out.println(Integer.toHexString(c));

          ????????}

          }

          使用Integer.toHexString()將10進制轉換位16進制。

          輸出位ffffffff 和fffffffc左移2位最后補2個0,最后的1100轉換位16進制就是c

          ?

          public class test {

          ????public static void main(String[] args) {

          ????????int i=0xffffffff;

          ????????int c=i>>>2;

          ????????System.out.println(Integer.toHexString(i));

          ????????System.out.println(Integer.toHexString(c));

          ????????}

          }

          無符號右移輸出是ffffffff和3fffffff 右移2位后最左段是0011,轉換位16進制就是3

          ?

          練習:

          將一個整數110從右端開始的4到7位變為0.

          答:要想將4到7位變為0,先構造一個4到7位是0的數,然后用110和這個數與&。任何數和0與都是0,就完成了任務。要構造一個4到7位是0的數,先構造一個低4位是1的數15,然后將它左移3位,然后取反,就構造成4到7位是0的數了。程序如下。

          public class test {

          ????public static void main(String[] args) {

          ????????int i=15;

          ????????int j=i<<3;

          ????????int c=~j;

          ????????int k=110;

          ????????int l=k&c;

          ????????System.out.println(Integer.toBinaryString(i));

          ????????System.out.println(Integer.toBinaryString(j));

          ????????System.out.println(Integer.toBinaryString(c));

          ????????System.out.println(Integer.toBinaryString(k));

          ????????System.out.println(Integer.toBinaryString(l));

          ????????}

          }

          輸出是

          00001111

          01111000

          10000111

          01101110

          00000110

          ?

          將一個數左移一位等于是將數*2,右移一位相當于將數/2。

          左移2位相當與乘兩次2,右移2位相當與除兩次2.

          posted on 2008-02-28 17:15 rick 閱讀(518) 評論(2)  編輯  收藏

          評論

          # re: 移位運算符 2010-01-04 00:51 sisi

          問個問題,最后那個無符號右移2位的結果10進制應該是63,可是為什么如果我用16進制顯示是對的3fffffff,但是不用Integer.toHexString顯示的就成了1073741823?前面左移和帶符號右移用十進制顯示-4和-1都沒出現問題啊
            回復  更多評論    

          # re: 移位運算符 2010-01-04 19:36 sisi

          知道了,3fffffff是1073741823
            回復  更多評論    

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 镇原县| 枞阳县| 北票市| 高平市| 正安县| 库伦旗| 翼城县| 肇州县| 克什克腾旗| 比如县| 嘉禾县| 万州区| 濮阳市| 河东区| 湘潭县| 顺平县| 奎屯市| 牡丹江市| 阿拉善盟| 乳源| 逊克县| 东方市| 浑源县| 浙江省| 平武县| 久治县| 阿荣旗| 密山市| 南城县| 衡山县| 共和县| 玛多县| 定西市| 金沙县| 茶陵县| 江源县| 秦皇岛市| 西乌| 阿拉尔市| 遂溪县| 宁安市|