说明:
通过位运算的“^”异或运算符把字符串与一个指定的值进行运算,从而改变字符串中每个字符的值,这样就可以得到一个加密后的字符串;当把加密后的字符串作为程序输入内容后,异或运算会把加密后的字符串还原为原有字符串的值。
代码:
#include "stdio.h"
void main()
{
char String[13] = "Hello World";
char* pStr = String;
printf("与0异或:");
while (*pStr != '\0')
{
putchar((*pStr) ^ 0);
++pStr;
}
printf("\n与1异或:");
pStr = String;
while (*pStr != '\0')
{
putchar((*pStr) ^ 1);
++pStr;
}
}
或者也可这样:
#include <stdio.h>
int main(void)
{
char str[16]="Hello World";
int i;
for(i=0;str[i]!='\0';i++)
{
printf("str[%d] = %c ,hex is 0x%x\n",i,str[i],str[i]);
}
printf("异或结果:\n");
for(i=0;i<11;i++)
{
str[i] ^= 0; // <-------- 将0该成1即可与1进行异或运算
printf("str[%d] = %c ,hex is 0x%x\n",i,str[i],str[i]);
}
getchar();
return 0;
补充:
与运算 (“ & ”)
参与运算的两个数据,按照二进制位进行“与运算”。
运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;
即:两位同时为1,则值为1。否则为0
例如:6 & 7 = 110 & 111 = 110 = 6
8 & 3 = 1000 & 11 = 0 = 0
或运算 (“ | ”)
参与运算的两个数据,按照二进制位进行“或运算”。
运算规则:0&0=0; 0&1=1; 1&0=1; 1&1=1;
即:参与运算的两个数据只要有一个值为1 那么值为1
例如:12 | 5 = 1100 | 101 = 1101 = 13
4 | 5 = 100 | 101 = 101 = 5
异或运算 (“ ^ ”)
参与运算的两个数据,按照二进制位进行“异或运算”。
运算规则: 0&0=0; 0&1=1; 1&0=1; 1&1=0;
即:参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。
例如:9^5可写成算式如下: 00001001^00000101=00001100 (十进制为12)可见9^5=12