#include <stdio.h>
#include<string.h>
#define BITS_PER_LONG 32
unsigned long __fls(unsigned long word)
{
int num = BITS_PER_LONG - 1;
if (!(word & (~0ul << (BITS_PER_LONG-16)))) {
num -= 16;
word <<= 16;
printf("word = [%d],num=[%d] (~0ul << (BITS_PER_LONG-16))=[%x]\n",word,num,(~0ul << (BITS_PER_LONG-16)));
}
if (!(word & (~0ul << (BITS_PER_LONG-8)))) {
num -= 8;
word <<= 8;
printf("word = [%d],num=[%d] (~0ul << (BITS_PER_LONG-8))=[%x]\n",word,num,(~0ul << (BITS_PER_LONG-8)));
}
if (!(word & (~0ul << (BITS_PER_LONG-4)))) {
num -= 4;
word <<= 4;
printf("word = [%d],num=[%d] (~0ul << (BITS_PER_LONG-4))=[%x]\n",word,num,(~0ul << (BITS_PER_LONG-4)));
}
if (!(word & (~0ul << (BITS_PER_LONG-2)))) {
num -= 2;
word <<= 2;
printf("word = [%d],num=[%d] (~0ul << (BITS_PER_LONG-2))=[%x]\n",word,num,(~0ul << (BITS_PER_LONG-2)));
}
if (!(word & (~0ul << (BITS_PER_LONG-1))))
{
num -= 1;
printf("word = [%d],num=[%d] (~0ul << (BITS_PER_LONG-1))=[%x]\n",word,num,(~0ul << (BITS_PER_LONG-1)));
}
return num;
}
int main(int argc, char **argv)
{
printf("fls = [%d]\n",__fls(0X1010));
printf("aa = [%x]\n",~0ul);
return 0;
#include<string.h>
#define BITS_PER_LONG 32
unsigned long __fls(unsigned long word)
{
int num = BITS_PER_LONG - 1;
if (!(word & (~0ul << (BITS_PER_LONG-16)))) {
num -= 16;
word <<= 16;
printf("word = [%d],num=[%d] (~0ul << (BITS_PER_LONG-16))=[%x]\n",word,num,(~0ul << (BITS_PER_LONG-16)));
}
if (!(word & (~0ul << (BITS_PER_LONG-8)))) {
num -= 8;
word <<= 8;
printf("word = [%d],num=[%d] (~0ul << (BITS_PER_LONG-8))=[%x]\n",word,num,(~0ul << (BITS_PER_LONG-8)));
}
if (!(word & (~0ul << (BITS_PER_LONG-4)))) {
num -= 4;
word <<= 4;
printf("word = [%d],num=[%d] (~0ul << (BITS_PER_LONG-4))=[%x]\n",word,num,(~0ul << (BITS_PER_LONG-4)));
}
if (!(word & (~0ul << (BITS_PER_LONG-2)))) {
num -= 2;
word <<= 2;
printf("word = [%d],num=[%d] (~0ul << (BITS_PER_LONG-2))=[%x]\n",word,num,(~0ul << (BITS_PER_LONG-2)));
}
if (!(word & (~0ul << (BITS_PER_LONG-1))))
{
num -= 1;
printf("word = [%d],num=[%d] (~0ul << (BITS_PER_LONG-1))=[%x]\n",word,num,(~0ul << (BITS_PER_LONG-1)));
}
return num;
}
int main(int argc, char **argv)
{
printf("fls = [%d]\n",__fls(0X1010));
printf("aa = [%x]\n",~0ul);
return 0;
}
makefile 如下:加了一个新文件Makefile。填入下面的内容,然后输入make就可以编译了
test:he.c
gcc he.c -o hello