如下的位标记模式(bit flag pattern)是很普通的技术常识,在图形用户界面GUI程序的公用API中得到了广泛应用。呵呵,我们可能正在为资源有限设备如蜂窝电话或者PDA编写一个Java GUI程序。对GUI中每个构件如按钮(button)和下拉列表(drop-down list)都拥有一些Boolean选择项标记。使用位标记,可以将许多选择项安排到一个变量中。
//The constants to use with our GUI widgets: GUI构件使用的选择项常量final int visible = 1 << 0; // 1 可见?final int enabled = 1 << 1; // 2 使能?final int focusable = 1 << 2; // 4 focus?final int borderOn = 1 << 3; // 8 有边界?final int moveable = 1 << 4; // 16 可移动?final int editable = 1 << 5; // 32 可编辑?final int borderStyleA = 1 << 6; // 64 有样式A边界?final int borderStyleB = 1 << 7; //128有样式B边界?final int borderStyleC = 1 << 8; //256有样式C边界?final int borderStyleD = 1 << 9; //512有样式D边界?//etc.myButton.setOptions( 1+2+4 ); //set a single widget.int myDefault= 1+2+4; //A list of options.int myExtras = 32+128; //Another list.myButtonA.setOptions( myDefault );myButtonB.setOptions( myDefault myExtras );
//棋盘上64个格子所有可能状态的整数枚举 final int EMPTY = 0;final int WHITE_PAWN = 1;final int WHITE_KNIGHT = 2;final int WHITE_BISHOP = 3;final int WHITE_ROOK = 4;final int WHITE_QUEEN = 5;final int WHITE_KING = 6;final int BLACK_PAWN = 7;final int BLACK_KNIGHT = 8;final int BLACK_BISHOP = 9;final int BLACK_ROOK = 10;final int BLACK_QUEEN = 11;final int BLACK_KING = 12;
进一步,串联多个64位集合可以用于实现Conway生命游戏(Conway’s Game of Life, 见图6),一个在大的栅格上进行的模拟游戏。 游戏中新单元的生死由相邻单元的数量确定,游戏在一代代的单元繁衍中进行。当一个死去单元的四周具有3个生存单元时会复活。 一个单元的相邻单元中没有生存的或者仅有一个生存的,这个单元就死亡了(由于寂寞)。具有多于三个相邻生存单元的单元也会死亡(由于人口拥挤)。相邻单元的出生(复活)、生活,死亡,会对当前单元的状态造成很多改变。图6中显示了一个生命构造图,它会不断繁衍,生存下去,从而通过栅格。使用下面描述的算法我们可以生成模拟生存过程的下一步: