説明:
ビット単位の "^" XOR演算子を使用して文字列と指定された値を操作し、それによって文字列内の各文字の値を変更して、暗号化された文字列を取得できるようにします。文字列がプログラム入力として使用された後、XOR操作は暗号化された文字列を元の文字列値に復元します。
コード:
#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;
補足:
AND演算( "&")
参与运算的两个数据,按照二进制位进行“与运算”。
运算规则: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
OR演算( "|")
参与运算的两个数据,按照二进制位进行“或运算”。
运算规则: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
XOR演算( "^")
参与运算的两个数据,按照二进制位进行“异或运算”。
运算规则: 0&0=0; 0&1=1; 1&0=1; 1&1=0;
即:参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。
例如:9^5可写成算式如下: 00001001^00000101=00001100 (十进制为12)可见9^5=12