七段

          無論怎樣,請讓我先感謝一下國家。

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            35 Posts :: 2 Stories :: 7 Comments :: 0 Trackbacks
          java bitwise operator:
          ~ The unary bitwise complement operator "~" inverts a bit pattern.
          <<The signed left shift
          >>The signed right shift
          >>>the unsigned right shift

          & The bitwise & operator performs a bitwise AND operation.

          ^ The bitwise ^ operator performs a bitwise exclusive OR operation.

          | The bitwise | operator performs a bitwise inclusive OR operation.



          Usage:
          1,
          • ^ can swap two variables without using an intermediate, temporary variable which is useful if you are short on available RAM or want that sliver of extra speed.

            Usually, when not using ^, you will do:

            temp = a;

            a = b;

            b = temp;

            Using ^, no "temp" is needed:

            a ^= b;

            b ^= a;

            a ^= b;

            This will swap "a" and "b" integers. Both must be integers.

          2,
          an example of using an integer to maintain state flags (common usage):
          // These are my masks

          private static final int MASK_DID_HOMEWORK  = 0x0001;

          private static final int MASK_ATE_DINNER    = 0x0002;

          private static final int MASK_SLEPT_WELL    = 0x0004;



          // This is my current state

          private int m_nCurState;

          To set my state, I use the bitwise OR operator:

          // Set state for'ate dinner' and 'slept well' to 'on'

          m_nCurState
          = m_nCurState | (MASK_ATE_DINNER | MASK_SLEPT_WELL);

          Notice how I 'or' my current state in with the states that I want to turn 'on'. Who knows what my current state is and I don't want to blow it away.

          To unset my state, I use the bitwise AND operator with the complement operator:

          // Turn off the 'ate dinner' flag

          m_nCurState
          = (m_nCurState & ~MASK_ATE_DINNER);

          To check my current state, I use the AND operator:

          // Check if I did my homework

          if (0 != (m_nCurState & MASK_DID_HOMEWORK)) {

             
          // yep

          } else {

             
          // nope...

          }

          Why do I think this is interesting? Say I'm designing an interface that sets my state. I could write a method that accepts three booleans:

          void setState( boolean bDidHomework, boolean bAteDinner, boolean bSleptWell);

          Or, I could use a single number to represent all three states and pass a single value:

          void setState( int nStateBits);

          If you choose the second pattern you'll be very happy when decide to add another state - you won't have to break existing impls of your interface.


          posted on 2010-04-13 14:39 sevenduan 閱讀(420) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 庄浪县| 辽宁省| 桐梓县| 永年县| 梁河县| 溧水县| 壤塘县| 原平市| 武宣县| 尖扎县| 哈密市| 鹤壁市| 南木林县| 长阳| 靖边县| 元谋县| 红原县| 安岳县| 湘乡市| 仙游县| 通辽市| 北京市| 玉门市| 铜梁县| 黄山市| 基隆市| 乌什县| 贡嘎县| 周口市| 刚察县| 青冈县| 铜川市| 库伦旗| 洛阳市| 六枝特区| 闵行区| 进贤县| 东方市| 安宁市| 白玉县| 阿坝县|