位操作

据说嵌入式操作员要求熟悉位操作,于是就练了几个位操作的程序。

呵呵,第一个不算,第一个主要是在一个字符串中找到最长的子串,犯的错误是第一次没有考虑到最后一个字符串。

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的次方的函数

你可能感兴趣的:(c,String,嵌入式,语言,byte,n2)