Ò׽ؽØͼÈí¼þ¡¢µ¥Îļþ¡¢Ãâ°²×°¡¢´¿ÂÌÉ«¡¢½ö160KB

ÎÒµÄCʵ¼ù(7)£ºÎ»¼ÆÊý

  λ¼ÆÊý¾ÍÊǶÔÒ»¸öÊýÖоßÓÐijЩÌØÕ÷µÄλ½øÐмÆÊý¡£¿´ÏÂÃæʵÏÖ£º
/* bitscount.c£ºÎ»¼ÆÊý */
/* ¼ÆËãxÖÐ1λµÄÊýÄ¿£º·½°¸1£¬²ÉÓ÷ÖÖβßÂÔ */
inline int pop(unsigned x){
/* ¶Ôÿ¸ö2λ×ֶΣ¬ÏÈÎö³öÆäÓҶ˵Ä1룬ÔÙÎö³öÆä×ó¶ËµÄ1λ£¬È»ºóÈÃÕâÁ½¸öλÏà¼Ó */
x=(x & 0x55555555)+((x>>1) & 0x55555555);
/* ¶Ôÿ¸ö4λ×ֶΣ¬ÏÈÎö³öÆäÓÒ¶Ë2λ×ֶΣ¬ÔÙÎö³öÆä×ó¶Ë2λ×ֶΣ¬È»ºóÈÃÕâÁ½¸ö2λ×Ö¶ÎÏà¼Ó */
x=(x & 0x33333333)+((x>>2) & 0x33333333);
/* ¶Ôÿ¸ö8λ×ֶΣ¬ÏÈÎö³öÆäÓÒ¶Ë4λ×ֶΣ¬ÔÙÎö³öÆä×ó¶Ë4λ×ֶΣ¬È»ºóÈÃÕâÁ½¸ö4λ×Ö¶ÎÏà¼Ó */
x=(x & 0x0f0f0f0f)+((x>>4) & 0x0f0f0f0f);
/* ¶Ôÿ¸ö16λ×ֶΣ¬ÏÈÎö³öÆäÓÒ¶Ë8λ×ֶΣ¬ÔÙÎö³öÆä×ó¶Ë8λ×ֶΣ¬È»ºóÈÃÕâÁ½¸ö8λ×Ö¶ÎÏà¼Ó */
x=(x & 0x00ff00ff)+((x>>8) & 0x00ff00ff);
/* ×îºóÈÃÁ½¸ö16λ×Ö¶ÎÏà¼Ó */
x=(x & 0x0000ffff)+(x>>16);
return x;
}
/* ·½°¸2£ºÓù«Ê½sum_digits(z)=z-[z/2]-[z/4]-...-[z/2**(n-1)]£¬
²¢½áºÏ·ÖÖβßÂÔÀ´¼ÆËã */
inline int pop_2(unsigned x){
unsigned n;
n=(x>>1) & 0x77777777; /* ¶Ôÿ¸ö4λ×Ö¶Îz£¬¼ÆËã[z/2] */
x=x-n; /* ¼ÆËãz-[z/2] */
n=(n>>1) & 0x77777777; /* ¼ÆËã[z/4] */
x=x-n; /* ¼ÆËãz-[z/2]-[z/4] */
x=(x+(x>>4)) & 0x0f0f0f0f; /* ¶ÔÿÏàÁÚµÄÁ½¸ö4λ×Ö¶ÎÏà¼Ó£¬À©Õ¹³É4¸ö8λ×ֶΠ*/
x=x*0x01010101; /* ³ËÒÔ0x01010101£¬¼´°ÑÕâ4¸ö×Ö½ÚÏà¼Ó£¬
½á¹û´æ·ÅÔÚ×î¸ß½×µÄÄǸö×Ö½ÚÖÐ */
return x>>24;
}
/* ·½°¸3£ºÍ¨¹ýx&(x-1)²»¶ÏµØ°Ñ×îÓÒ²àµÄ1λ¸Ä³É0룬²¢¼Ç¼ÏÂÕâÑùµÄÐ޸ĴÎÊý£¬Ö±µ½x±ä³É0 */
inline int pop_3(unsigned x){
int n=0;
while(x!=0){
++n;
x=x & (x-1);
}
return n;
}
/* ¼ÆËãÕû¸öÊý×éÖеÄ1λÊýÄ¿ */
int pop_array(unsigned A[], int n){
register int i,j,lim;
register unsigned s,s8,x;
s=0;
for(i=0;i<n;i=i+31){
lim=n <= i+31 ? n : i+31;
s8=0;
for(j=i;j<lim;++j){
x=A[j];
x=x-((x>>1) & 0x55555555); /* ±ä³É16¸ö2λ×ֶΠ*/
x=(x & 0x33333333)+((x>>2) & 0x33333333); /* ±ä³É8¸ö4λ×ֶΠ*/
x=(x+(x>>4)) &


Ïà¹ØÎĵµ£º

¹ØÓÚC/C++ ±í´ïʽÇóֵ˳Ðò 䶨Òå

±í´ïʽµÄ¸±×÷ÓÃ
ÔËËã·ûµÄÓÅÏȼ¶Óë½áºÏÐԹ涨Á˱í´ïʽÖÐÏàÁÚÁ½¸öÔËËã·ûµÄÔËËã´ÎÐò£¬µ«¶ÔÓÚË«Ä¿
ÔËËãµÄ²Ù×÷Êý£¬C++ûÓй涨ËûÃǵļÆËã´ÎÐò¡£ÀýÈ磬¶ÔÓÚ±í´ïʽ£º
exp1 + exp2;
ÏȼÆËã exp1 »¹ÊÇ exp2£¿²»Í¬µÄ±àÒëÆ÷Óв»Í¬µÄ×ö·¨¡£
ÔÚÊýѧÉÏ£¬¶ÔÓÚË«Ä¿ÔËËã·û£¬²»ÂÛÏȼÆËãÄÄÒ»¸ö²Ù×÷Êý£¬ÒªÇó×îÖÕ¼ÆËã½á¹ûÒ»Ñù¡£
ÔÚ C++ ......

extern "C"Ïà¹ØµÄһЩϸ½ÚÎÊÌâ

×÷ÕߣºÊ¯Í·
extern "C"°üº¬Ë«Öغ¬Ò壬ÆäÒ»£º±»ËüÐÞÊεÄÄ¿±êÊÇ“extern”µÄ£»Æä¶þ£º±»ËüÐÞÊεÄÄ¿±êÊÇ“C”µÄ¡£
1£©±»extern “C”ÏÞ¶¨µÄº¯Êý»ò±äÁ¿ÊÇexternÀàÐ͵ģ»
    externÊÇC/C++ÓïÑÔÖбíÃ÷º¯ÊýºÍÈ«¾Ö±äÁ¿×÷Ó÷¶Î§£¨¿É¼ûÐÔ£©µÄ¹Ø¼ü×Ö£¬¸Ã¹Ø¼ü×Ö¸æËß±àÒëÆ÷£¬ÆäÉùÃ÷µÄº¯ ......

cÍ·Îļþ×÷ÓÃ

POSIX±ê×¼¶¨ÒåµÄÍ·Îļþ
<dirent.h>        Ŀ¼Ïî
<fcntl.h>         Îļþ¿ØÖÆ
<fnmatch.h>    ÎļþÃûÆ¥ÅäÀàÐÍ
<glob.h>    ·¾¶ÃûģʽƥÅäÀàÐÍ
<grp.h>    ......

linuxÄÚºËÒÆÖ²s3c2410£¬ÒÆÖ²Õýʽ¿ªÊ¼2

ÄÚºËÆô¶¯µÄÏÖÔÚÒѾ­ÊÇ¿ªÊ¼Ö´Ðк¯Êýstart_kernelº¯ÊýÁË¡£start_kernelº¯ÊýÔÚinit/main.cÖж¨Òå¡£start_kernelº¯ÊýÖ»ÊÇÍê³É
ÏàÓ¦µÄ½á¹¹µÄ³õʼ»¯ÈÎÎñ¡£
    printk(KERN_NOTICE);
    printk(linux_banner);
    setup_arch(&command_line);
ÔÚubootµÄÒ»Ö±¹ý³ÌÖУ¬uboo ......

¡ïÔõÑùѧϰCÓïÑÔ(Ï׸øÃÔãµÄC°®ºÃÕß)¡ï

Ò» £¬ÔõÑùѧϰCÓïÑÔ
     ºÜ¶àÈ˶ÔѧϰCÓïÑԸе½ÎÞ´ÓÏÂÊÖ£¬¾­³£ÎÊÎÒͬһ¸öÎÊÌ⣺¾¿¾¹ÔõÑùѧϰCÓïÑÔ£¿ÎÒÊÇÒ»¸ö½Ìʦ£¬ÒѾ­¿ª·¢Á˺ܶàÄêµÄ³ÌÐò£¬ºÍºÜ¶à¸Õ¸ÕÆð²½µÄÈËÒ»Ñù£¬Ñ§Ï°µÄµÚÒ»¸ö¼ÆËã»úÓïÑÔ¾ÍÊÇCÓïÑÔ¡£¾­¹ýÕâЩÄêµÄ¿ª·¢£¬ÎÒÉîÉîµÄÌå»áµ½CÓïÑÔ¶ÔÓÚÒ»¸ö³ÌÐòÉè¼ÆÈËÔ±¶àôµÄÖØÒª£¬Èç¹û²»¶®CÓ ......
© 2009 ej38.com All Rights Reserved. ¹ØÓÚE½¡ÍøÁªÏµÎÒÃÇ | Õ¾µãµØͼ | ¸ÓICP±¸09004571ºÅ