编码技巧----位运算

Java的位运算有以下几个:

  • 左移 : <<
  • 右移 : >>
  • 无符号右移 : >>>
  • 与 : &
  • 或 : |
  • 非 : ~
  • 异或: ^

有一个这样的例子: 水果 有各种特征, 有 大的,小的,甜的,酸的,便的,贵的。

那就可以这样定义这些属性:

public static final int  featureBig = 1; // 特征 大  : 00000000 00000000 00000000 00000001   (int占四个字节,每个字节占8位)

public static final int  featureSmall = featureBig <<1 ; // 特征 小   00000010 (已省略前24位)   

public static final int featureSweet = featureBig <<2 ; //  特征 甜   00000100
    
public static final int featureSour = featureBig <<3 ; //  特征 酸   00001000

public static final int featureCheap = featureBig <<4 ; //  特征 便   00010000

public static final int featureExpensive = featureBig <<5 ; //  特征 贵  00100000

添加 |

那以西瓜为例, 首先初始化时:

public static int watermelonFeatures = 0;  // 西瓜的初始化特征

那西瓜的特征有 : 大的, 甜的 ,便宜的 这几个特征, 那我们怎么添加呐?

watermelonFeatures |= featureBig | featureSweet | featureCheap;  //特征:大/ 甜/便宜   00010101

判断 &

那现在要判断它是否有 “酸”的特征? 怎么判断呐? 用 &

watermelonFeatures & featureSour !=0    //false

00010101   
            &   
00001000
--------------
00000000    // 等0,所以false ,不包含 酸特征

再判断它是否有“甜”的特征?

watermelonFeatures & featureSour !=0    //false

00010101   
            &   
00000100
--------------
00000100    // 不等0,所以true,包含 甜特征

移除 &~

那现在冬天了,西瓜过季了,涨价了。怎么移除这个便宜的特征呐? 用 ^

watermelonFeatures & ~featureCheap   

00010101   
            &   
11101111    (~00010000)
--------------
00000101    // 可见便宜特征又被移除

Android中使用位运算

android:layout_gravity="bottom|right"

在Intent.java中:

  public static final int FILL_IN_ACTION = 1<<0;
  
  public static final int FILL_IN_DATA = 1<<1;
  
  public static final int FILL_IN_CATEGORIES = 1<<2;
  
  public static final int FILL_IN_COMPONENT = 1<<3;
  
 
mIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
                | Intent.FLAG_ACTIVITY_SINGLE_TOP
                );
public void setPressed(boolean pressed) {
     if (pressed) {
         mPrivateFlags |= PRESSED;     // 添加PRESSED状态
     } else {
         mPrivateFlags &= ~PRESSED;    // 取消PRESSED状态
     }
     refreshDrawableState();
     dispatchSetPressed(pressed);
 }

你可能感兴趣的:(编码技巧,java,位运算,android,与或非)