C语言的位操作(Two)

一、位运算赋值运算符

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

位运算赋值运算符

二、位运算应用

**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;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 位运算 位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,...
    IIronMan阅读 12,397评论 0 2
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 13,851评论 6 13
  • 位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。C语言提供了6个位操作运算符。这些运算符只...
    朱森阅读 4,059评论 0 1
  • 谨记: 上帝在缔造每个人的时候,给予每个人的一切都是相同的,然而,人与人却是存在如此大的差距,记着上帝为你关上了一...
    长风留言阅读 10,591评论 0 5
  • 我喜欢看你的眼睛 扑闪扑闪的眸子真真像放着电的珍珠 一不小心地就被夺去目光 我喜欢听你说话的声音 就那么普普通通的...
    凉风一梦阅读 2,383评论 0 1