iOS每周500字首页投稿(暂停使用,暂停投稿)

C语言的位操作(Two)

2016-06-21  本文已影响172人  遮天的龙

一、位运算赋值运算符

闲话就不多说,直接上图咯。

位运算赋值运算符

二、位运算应用

**eg:取一个整数a从右端开始的4~7位并输出 **

   #include <stdio.h>
    int main()
   {
       unsigned short a,b,c,d;      //声明字符型变量
      scanf("%o",&a);
      b=a>>4;           //右移运算
      c=~(~0<<4);           //取反左移后再取反
      d=b&c;                    //按位与
      printf("%o\n%o\n",a,d);
      return 0;
  }

  <——---------------------------->
  输入的八进制数是1640,
  转换为2进制数是:0000 0011 1010 0000,
  获取其右端开始的4到7位是二进制数1010,转换为八进制就是12。

思路:
(a)、 先使a右移4位;
(b)、 设置一个低4位全为1,其余全为0的数,可用(0<<4);
(c)、 将上面二者进行&运算。

此题核心思想的图片

三、异或加密

除了上节说到的“无参交换”,此处也是位操作的一处比较有技术的应用。


循环移位加密

void encode(char *secret)  //加密
{
    int n = strlen(secret);
    for(int i=0; i<n; i++)
      {
        unsigned char ch = secret[i];
        ch = 0xff & (((ch &(1<<7))>>7) |(ch<<1));  
          secret[i] = ch;
      }
} 
void decode(char *secret)  //解密
{
    int n = strlen(secret);
    for(int i=0; i<=n; i++)
    {
      unsigned char ch = secret[i];
      ch = 0xff & (((ch&1)<<7) |(ch>>1));
      secret[i] = ch;
    }
}
int main()
{
      char buf[] = "I am caijinlong”;             
      encode(buf);
      printf("%s\n",buf);
      decode(buf);
      printf("%s\n",buf);
      return 0;
}
上一篇 下一篇

猜你喜欢

热点阅读