- 注册时间
- 2008-3-28
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 3286
- 在线时间
- 小时
|
发表于 2009-2-5 08:42:48
|
显示全部楼层
早上来了测试了一下,那个程序结果好像还对 ,测试代码:- UINT32 i,b,e;
- for (i=1 ; i<0xFFFFFFFF ; i++) {
- b=GreaterEqualBit2_58F(i);
- e=GreaterEqualBit2_SHSHSH(i);
- if (b!=e) {
- printf( "i=%d,G=0x%X,L=0x%X \n",i,b,e);
- break;
- }
- }
复制代码 生成数据代码:- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //m 1-2 ,2 bits :mark
- // 0: at least 3 ones
- // 1: 2 ones
- // 2: 1 one
- // 3: 0 one
- //x 3-12 ,10 bits:
- // when contains at least 2 ones ,then x= upper-one
- // eg : 11001 - 100000 ,1001 - 10000 ,0011-0100
- //y 13-22 ,10 bits:
- // when contains 2 ones, y= GreaterEqualBit2(first byte+1)
- // eg : 1010-1100 ,0011 -0100
- //z 23-32 ,10 bits:
- // when contains at least 3 ones , it is y =GreaterEqualBit2(first byte) ,so just return z<<24
- // eg : 0110010 -1000000,101011 -110000
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
- int onescount(UINT32 n){
- int i,r=0;
- for (i=0;i<8;i++){
- if (n & (1<<i)) {
- r++;
- }
- }
- return r;
- }
- int getmark(UINT32 n)
- {
- int t= onescount(n);
- switch(t) {
- case 0:
- return 3;
- case 1:
- return 2;
- case 2:
- return 1;
- default:
- return 0;
- }
- }
- int getx(UINT32 n){
- //x 3-12 ,10 bits:
- // when contains at least 2 ones ,then x= upper-one
- // eg : 11001 - 100000 ,1001 - 10000 ,0011-0100
- int i,ret=0;
- int t =onescount(n);
- if(t>1){
- for(i=31;i>=0;i--){
- if ( n & (1<<i) ) {
- ret = 1<<(i+1);
- break;
- }
- }
- }
- return ret;
- }
- int gety(UINT32 n){
- //y 13-22 ,10 bits:
- // when contains 2 ones, y= GreaterEqualBit2(first byte+1)
- // eg : 1010-1100 ,0011 -0100
- int ret=0;
- int t =onescount(n);
- if(t==2){
- ret=GreaterEqualBit2_58F(n+1);
- }
- return ret;
- }
- int getz(UINT32 n){
- //z 23-32 ,10 bits:
- // when contains at least 3 ones , it is y =GreaterEqualBit2(first byte) ,so just return z<<24
- // eg : 0110010 -1000000,101011 -110000
- int ret=0;
- int t =onescount(n);
- if(t>2){
- ret=GreaterEqualBit2_58F(n);
- }
- return ret;
- }
- void gendata(){
- UINT32 i,m,x,y,z;
- printf( "\n---------------------------------------------------------------------\n");
- for (i=0 ; i<256 ; i++){
- m=getmark(i);
- x=getx(i);
- y=gety(i);
- z=getz(i);
- printf( "0x%08X,",(m<<30)+(x<<20)+(y<<10)+z);
- if (! ((i+1)%8)) {
- printf( "\n");
- }
- }
-
- }
复制代码 |
|