Jafe Lee

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            49 隨筆 :: 0 文章 :: 24 評論 :: 0 Trackbacks
          移位操作要注意的問題是高(低)位是補(bǔ)0還是補(bǔ)1和對char, byte, short型的操作:
          (1)<< : (left-shift), 最低位補(bǔ)0
          (2)>> : (signed right-shift), 右移過程使用符號位擴(kuò)展(sign extension),即如果符號為為1則高位補(bǔ)1,? 是0則補(bǔ)0,也就是邏輯右移
          (3)>>> : (unsigned right-shit),右移過程使用零擴(kuò)展(zero extension),即最高位一律補(bǔ)0,也就是算術(shù)右移
          (4) 移位操作的數(shù)據(jù)類型可以是byte, char, short, int, long型,但是對byte, char, short進(jìn)行操作時會先把它們變成一個int型,最后得到一個int型的結(jié)果,對long型操作時得到一個long型結(jié)果,不可以對boolean型進(jìn) 行操作。
          (5)移位操作符可以和=合并起來,即 <<= 、 >>= 和 >>>=。例如 a >>= 2; 表示將a右移兩位后的值重新賦給a。當(dāng)時在使用這三個操作符對 byte, char, short型數(shù)據(jù)進(jìn)行操作時要注意,例如有一下代碼片段:
          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);
          ????}
          }
          ????
          運(yùn)行結(jié)果是:
          ??? ??? ??? -4
          ??? ?? ?? ? -4
          ??? ?? ?? ?? 508
          這 說明了在操作a <<= 2 執(zhí)行過程是這樣的:先將 byte型的數(shù) 127變成int型,左移2位得到 508,然后把508賦給byte型變量a時只是簡單地"折斷"(truncate)得到數(shù)-4。編譯時編譯器不會提示你可能損失精度(實(shí)際上在本例中確 實(shí)是損失精度了),但是如果你把a(bǔ) <<= 2改成 a = a << 2;編譯器就會提示可能損失精度了。
          posted on 2007-05-22 17:17 Jafe Lee 閱讀(1582) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 阆中市| 聂荣县| 偃师市| 加查县| 定西市| 定陶县| 汉沽区| 炎陵县| 象州县| 西吉县| 法库县| 元朗区| 台前县| 鲁山县| 讷河市| 湾仔区| 昌吉市| 资阳市| 平和县| 平遥县| 东兴市| 桐柏县| 桦甸市| 师宗县| 开江县| 平遥县| 绥滨县| 北海市| 成都市| 麦盖提县| 永登县| 中方县| 汶川县| 岚皋县| 旅游| 新宾| 庆城县| 钦州市| 慈溪市| 东阳市| 娄烦县|