易截截图软件、单文件、免安装、纯绿色、仅160KB

我的C实践(8):字搜索

  字搜索就搜索一个数中具有某些特征的位。实现如下:
/* wsearch.c:字搜索 */
/* 从左边寻找第一个0字节:第0(1,2,3)个字节是0时,返回0(1,2,3),否则返回4 */
int zbytel(unsigned x){
if((x>>24)==0) return 0;
else if((x & 0x00ff0000)==0) return 1;
else if((x & 0x0000ff00)==0) return 2;
else if((x & 0x000000ff)==0) return 3;
else return 4;
}
/* 方案2:无分支代码,用到了nlz指令 */
int zbytel_2(unsigned x){
int nlz(unsigned); /* 前向声明 */
unsigned y;
y=(x & 0x7f7f7f7f)+0x7f7f7f7f; /* 把0字节变成0x7f,非0字节最高位变成1 */
y=~(y | x | 0x7f7f7f7f); /* 把0字节变成0x80,非0字节变成0x00 */
return nlz(y)>>3; /* 第0(1,2,3)个字节是0时,y的前导有0(8,16,24)个0,故返回0(1,2,3),否则返回4 */
}
/* 从左边寻找第一个长为n的连续1位串,返回其位置(从0开始编号) */
int ffstr1(unsigned x, int n){
int nlz(unsigned); /* 前向声明 */
int k,p;
p=0; /* 初始化返回的位置 */
while(x!=0){
k=nlz(x);
x=x<<k; /* 跳过前导的0 */
p=p+k;
k=nlz(~x); /* 计算前导1的个数 */
if(k>=n)
return p; /* 若前导1的个数足够,则找到,直接返回其位置 */
x=x<<k; /* 否则连续的1不足n个,跳过它们,继续向前找 */
p=p+k;
}
return 32; /* 没找到则返回32 */
}
/* 计算前导0的个数 */
int nlz(unsigned x){
int n;
if(x==0) return (32);
n=1;
/* 用分治策略 */
if((x>>16)==0){ /* x<=0x0000ffff时 */
n=n+16;
x=x<<16; /* 移除前导的16个0 */
}
if((x>>24)==0){ /* x<=0x00ffffff时 */
n=n+8;
x=x<<8; /* 移除前导的8个0 */
}
if((x>>28)==0){ /* x<=0x0fffffff时 */
n=n+4;
x=x<<4; /* 移除前导的4个0 */
}
if((x>>30)==0){ /* x<=0x3fffffff时 */
n=n+2;
x=x<<2; /* 移除前导的2个0 */
}
return n-(x>>31); /* 注意n初始时为1,如果移除前导0后的x最高位为0,则n恰好计算了这个0;
如果最高位为1,则没有额外的前导0,n必须要减去多出的1 */
}


相关文档:

C/C++对MySQL操作

昨天晚上在看C/C++对数据库的操作,猛然间觉得十分亲切,因为其中很多函数都和PHP中对MySQL操作相同,这是才想起PHP是C演化而来的。经过一番捣腾,终于完成了一个简单的程序,但是仍然存在着一个严重的问题,就是从数据库中得到的结果在屏幕上显示的是乱码,很让人烦。还望高手们赐教!
1.在机器上装上MySQL ,假设安装在 C ......

no acceptable C compiler found in $PATH

GCC安装成功,所需文件有:
libf2c-3.3.2-1.i386.rpm
libstdc++-devel-3.3.2-1.i386.rpm
glibc-kernheaders-2.4-8.36.i386.rpm
glibc-headers-2.3.2-101.i386.rpm
glibc-devel-2.3.2-101.i386.rpm
gcc-objc-3.3.2-1.i386.rpm
binutils-2.14.90.0.6-3.i386.rpm
gcc-3.3.2-1.i386.rpm
gcc-c++-3.3.2-1.i386.rpm
autom ......

extern "C"相关的一些细节问题

作者:石头
extern "C"包含双重含义,其一:被它修饰的目标是“extern”的;其二:被它修饰的目标是“C”的。
1)被extern “C”限定的函数或变量是extern类型的;
    extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函 ......

C++中extern “C”含义深层探索

本文关键词: c++ 含义
1.引言
C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量 ......

extern "C" 阅读笔记 zz

发信人: RoachCock (反动学术权威), 信区: CPlusPlus
标  题: extern "C" 阅读笔记
发信站: 水木社区 (Fri Mar  7 00:22:47 2008), 站内
本以为很简单,仔细阅读了一下 C++ 标准,发现内容还不少。总结了一下。
要点:
函数类型,函数名,变量名具有语言链接性,language linkage。
语言链接性可能会影响到 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号