一、位运算赋值运算符
闲话就不多说,直接上图咯。
二、位运算应用
**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;
}