Jafe Lee

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            49 隨筆 :: 0 文章 :: 24 評論 :: 0 Trackbacks
          移位操作要注意的問題是高(低)位是補0還是補1和對char, byte, short型的操作:
          (1)<< : (left-shift), 最低位補0
          (2)>> : (signed right-shift), 右移過程使用符號位擴展(sign extension),即如果符號為為1則高位補1,? 是0則補0,也就是邏輯右移
          (3)>>> : (unsigned right-shit),右移過程使用零擴展(zero extension),即最高位一律補0,也就是算術(shù)右移
          (4) 移位操作的數(shù)據(jù)類型可以是byte, char, short, int, long型,但是對byte, char, short進行操作時會先把它們變成一個int型,最后得到一個int型的結(jié)果,對long型操作時得到一個long型結(jié)果,不可以對boolean型進 行操作。
          (5)移位操作符可以和=合并起來,即 <<= 、 >>= 和 >>>=。例如 a >>= 2; 表示將a右移兩位后的值重新賦給a。當時在使用這三個操作符對 byte, char, short型數(shù)據(jù)進行操作時要注意,例如有一下代碼片段:
          public?class?ShiftTest
          {
          ????
          public?static?void?main(String?[]?args)
          ????{
          ????????
          byte?a;
          ????????
          byte?b;
          ????????
          byte?c;
          ????????a?
          =?127;
          ????????b?
          =?127;
          ????????c?
          =?127;
          ????????a?
          <<=?2;
          ????????System.out.println(a);
          ????????System.out.println(b?
          <<=?2);
          ????????System.out.println(c?
          <<?2);
          ????}
          }
          ????
          運行結(jié)果是:
          ??? ??? ??? -4
          ??? ?? ?? ? -4
          ??? ?? ?? ?? 508
          這 說明了在操作a <<= 2 執(zhí)行過程是這樣的:先將 byte型的數(shù) 127變成int型,左移2位得到 508,然后把508賦給byte型變量a時只是簡單地"折斷"(truncate)得到數(shù)-4。編譯時編譯器不會提示你可能損失精度(實際上在本例中確 實是損失精度了),但是如果你把a <<= 2改成 a = a << 2;編譯器就會提示可能損失精度了。
          posted on 2007-05-22 17:17 Jafe Lee 閱讀(1588) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 城步| 弥渡县| 尼木县| 四川省| 贵港市| 太保市| 海口市| 白山市| 尼木县| 苗栗市| 睢宁县| 东乌珠穆沁旗| 喀喇沁旗| 康平县| 新巴尔虎右旗| 永嘉县| 湖南省| 南召县| 玉环县| 四平市| 阿图什市| 乌海市| 雅安市| 吴江市| 深州市| 宣威市| 漳平市| 成都市| 抚顺市| 阳山县| 温泉县| 平原县| 仁怀市| 唐山市| 中江县| 彩票| 桦南县| 绩溪县| 兰考县| 茂名市| 甘德县|