- 注册时间
- 2004-9-23
- 最后登录
- 1970-1-1
|
发表于 2008-12-1 12:36:50
|
显示全部楼层
其实简单(或专业)点说就是使用位域(或称作位段),就是在一个普通变量里存放多个数据,比如我们常用到的16位(格式为RGB=565)色的图片,其实就是用一个int型变量(占二字节,合计十六位)中的前面(左边的,也称高)五位表示R(RED红色),中间的六位表示G(GREEN绿色),后边五位表示B(BLUE蓝色),也就是说,三个数据挤在两个字节当中.
说回来,
TailX=Snake[SnakeLen]/16;
TailY=Snake[SnakeLen]-TailX*16;
上面的代码其实完全可以用以下代码代替
TailX=Snake[SnakeLen]>>4;
TailY=Snake[SnakeLen]&31;
其实Snake[SnakeLen]保存了X,Y两个坐标,我前面帖子里说的用一组数组存坐标也是这种方法,在Snake[SnakeLen]中的高(左边)四位是X坐标,低四位是Y坐标,因此,我们把高四位向右移动四位,char型数据会自动在高位补0,那么位移以后就成了X坐标了,而我们再用31(二进制表示为00001111)去与Snake[SnakeLen]进行位与,那么根据位与的定义(两数据中只要有一个为0则结果为0),那么我们就可以把高四位的X数据过滤掉,这样就得到了Y坐标,不过建议您你下面的方法,也就是位运算,这样的代码执行效率大大高于上面的代码.
[ 本帖最后由 wqstar028 于 2008-12-1 12:38 编辑 ] |
|