#include <stdio.h> #include <stdlib.h> char* bitstream(void *s,int len) { char *t,*p; int i,j,k=0; p=(char *)s; t=(char*)calloc(len*8+1,sizeof(char)); for(j=0;j<len;j++) for(i=8*sizeof(char);i>0;i--,t[k++]=((p[j]>>i)&1)+'0'); puts(t);//打印数组s的二进制形式 return t; } char *Add(char *s1,char *s2) { char c,c1,c2; int i=0,j=0,k=0,i1=0,m; while(*(s1+i)!=0) i++; while(*(s2+i1)!=0) i1++; m=k=i>i1?i:i1; while(k!=0) { k--;i--;i1--; c1=(i>=0)?(*(s1+i)-'0'):0; c2=(i1>=0)?(*(s2+i1)-'0'):0; c=c1+c2; if(c<10) { if(c+j>=10) { s1[k]='0'+c+j-10; j=1; } else { s1[k]='0'+c+j; j=0; } } else { c-=10; s1[k]='0'+c+j; j=1; } } if(j==1) { for(i=m;i>0;i--) s1[i]=s1[i-1]; s1[i]='1'; } s1[m+1]=0; return s1; } char *shift(void *bn,int n) { char *p,*rt,*b; int i,j=0; if((p=(char *)calloc(n*8,sizeof(char)))==NULL) { puts("error"); return NULL; } if((rt=(char *)calloc(n*8,sizeof(char)))==NULL) { puts("error"); return NULL; } b=bitstream(bn,n); p[0]='1'; rt[0]=b[n*8-1]; while(b[j]=='0') j++; for(i=n*8-2;i>=j;i--) { Add(p,p); if(b[i]=='1') Add(rt,p); } free(p); return rt; } int main(void) { char *r; __int64 n=0x9873332fc1bf13fLL; unsigned char shu[10] = {0,0,0x9,0x87,0x33,0x32,0xfc,0x1b,0xf1,0x3f};// 数组的值为0x9873332fc1bf13f r=shift(shu,10); puts(r); printf("%I64d/n",n);//检测结果 free(r); getchar(); return 0; }