据说嵌入式操作员要求熟悉位操作,于是就练了几个位操作的程序。
呵呵,第一个不算,第一个主要是在一个字符串中找到最长的子串,犯的错误是第一次没有考虑到最后一个字符串。
maxstring
#include <stdio.h>
main()
{
char *a="fdsf fdsfasf fasfafasf fdafa fafaa asdf afdfsfsdfsfsdfsdfsd";
char *ptr;
int max=0,num=0;
ptr=a;
while(*ptr!='/0')
{
if((*ptr)!=32)
{
num++;
if(num>max)
{
max=num;
}
}
else
{
if(num>max)
{
max=num;
}
num=0;
}
ptr++;
}
printf("the max child string is %d/n",max);
}
这个程序是取出从n1到n2的位
wei1
#include <stdio.h>
getbits(int value,int n1,int n2)
{
int a=value >>n2;
int b=~(~0 << (n1-n2+1));
int c=a &b;
return c;
}
main()
{
int aa=0101675;
int n=8;
int m=5;
int result;
result=getbits(aa,n,m);
printf("%o/t%o/n",aa,result);
}
wei2
#include <stdio.h>
main()
{
int a=025236,i,b=0x1,d;
for(i=1;i<=8;i++)
{
d=a & b;
printf("%d",d);
a=a >>2;
}
}
这个程序是查找一个字节中1的个数,主要涉及了两个问题,第一是在标准c语言中没有字节类型,但char类型就相当于字符类型,所以要先利用字符类型定义byte类型,语句为typedef unsigned char byte;,需要注意的问题就是不要忘记了最后的那个分号(注:define语句后没有那个分号),第二是主要一个数不管是向左还是向右移位的时候,该数本身不会变化,如果想让该数也变化,应用语句如程序中a=a >> 1;
byt
#include <stdio.h>
typedef unsigned char byte;
main()
{
byte a=043,b=1;
int i,n=0;
for(i=1;i<=8;i++)
{
if(b==(a & b))
{
n++;
}
a=a >> 1;
}
printf("%d",n);
}
数字转换成字符串的程序
#include <stdio.h>
void to_string(int num)
{
int i,j,k,result;
k=~(~0 << 8);
i=sizeof(num);
for(j=1;j<=i;j++)
{
result=num & k;
printf("%c",result);
num=num >> 8;
}
}
main()
{
int a=12333;
to_string(a);
}
字符串转换成数字的程序
#include <stdio.h>
int zhi(int n)
{
int ii,re=1;
for(ii=0;ii<n;ii++)
{
re=re*10;
}
return re;
}
void to_int(char a[])
{
int len,i=0,k;
long num=0;
while(a[i]!='/0')
{
k=(int)a[i];
num=num+k*zhi(i*2);
i++;
}
printf("the result is %d/n",num);
}
main()
{
char a[]={"ab"};
to_int(a);
}
注意zhi()函数为自己写的求10的次方的函数