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

          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 閱讀(519) 評論(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
            回復  更多評論    

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


          網站導航:
           
          主站蜘蛛池模板: 邢台县| 潞城市| 广东省| 平果县| 奉化市| 沂水县| 启东市| 依兰县| 鸡泽县| 永德县| 清远市| 同江市| 宣化县| 东源县| 龙游县| 聂拉木县| 内江市| 溧阳市| 沐川县| 固阳县| 临湘市| 扎兰屯市| 舞钢市| 民乐县| 巴彦县| 赤壁市| 米脂县| 阿城市| 松滋市| 绥江县| 内丘县| 海林市| 泉州市| 浙江省| 保靖县| 田东县| 巨野县| 和龙市| 东丰县| 宁河县| 千阳县|