数组数据整体按位左移或右移一位

  1. #include <stdio.h>  
  2.   
  3. #define MSB        0x80  
  4. #define LSB        0x01  
  5.   
  6. // 数组数据整体按位左移一位  
  7. int left_shift(unsigned char *str, int len)  
  8. {  
  9.     int i;  
  10.       
  11.     for(i = 1; i <= len; i++)  
  12.     {  
  13.         str[i-1] = str[i-1] << 1;  
  14.           
  15.         if(i < len && str[i] & MSB)  
  16.         {  
  17.             str[i-1] = str[i-1] | LSB;      
  18.         }      
  19.     }  
  20.       
  21.     return 0;  
  22. }  
  23.   
  24. // 数组数据整体按位右移一位  
  25. int right_shift(unsigned char *str, int len)  
  26. {  
  27.     int i;  
  28.       
  29.     for(i = len-1; i >= 0; i--)  
  30.     {  
  31.         str[i] = str[i] >> 1;  
  32.         if(i > 0 && str[i-1] & LSB)  
  33.         {  
  34.             str[i] = str[i] | MSB;      
  35.         }      
  36.     }  
  37.       
  38.     return 0;      
  39. }  
  40.   
  41. int main(void)  
  42. {  
  43.     int i;  
  44.     unsigned char x1[] = {0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};  
  45.     unsigned char x2[] = {0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};  
  46.   
  47.     left_shift(x1, sizeof(x1)/sizeof(x1[0]));  
  48.       
  49.     right_shift(x2, sizeof(x2)/sizeof(x2[0]));  
  50.       
  51.     for(i = 0; i < sizeof(x1)/sizeof(x1[0]); i++)  
  52.         printf("%02x ", x1[i]);  
  53.     printf("\n");  
  54.       
  55.     for(i = 0; i < sizeof(x2)/sizeof(x2[0]); i++)  
  56.         printf("%02x ", x2[i]);      
  57.           
  58.       
  59.     return 0;      
  60. }  
shashou47

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: