# 异或(^)在C语言中的理解以及应用

异或(^)在C语言中的理解以及应用

异或(^)在C语言中是位运算的一种,我们用表格来对它进行总结:

^ (x^y)01
001
110

总的来说,位运算都相对比较简单,重点是我们需要理解它的应用场景。

利用位运算无中间变量交换

普通的交换:

int nValue1 = 0x1111111;
int nValue2 = 0x2222222; 

//交换
 int nTemp = nValue1;
 nValue1 = nValue2; 
 nValue2 = nTemp;

在该代码中我们可以发现我们浪费了中间变量nTemp的内存(虽然不大噢),如果希望节约这4个字节的内存(int),我们可以用到异或:

int main(int argc, char* argv[])
{
	int nValue1 = 0x1;
	int nValue2 = 0x2; 
	printf("%p, %p\r\n", nValue1, nValue2);

	nValue1 = nValue1 ^ nValue2;
    nValue2 = nValue1 ^ nValue2; 
    //nValue2 变成了原来的nValue1; 
    nValue1 = nValue1 ^ nValue2; 

	printf("%p, %p\r\n", nValue1, nValue2); 12 return 0; 13 }

加密解密中的应用

加密算法与编码算法最本质的区别在于:加密算法需要“密钥”(key)。
而异或天生适用于加密和解密:

void EncryptBlock(char* pData, int nLen, char* pKey, int nKeyLen) 
{ 
	for (size_t i = 0; i < nLen; i++) 
	 { 
	  pData[i] ^= pKey[i%nKeyLen]; 
	 } 
} 

 int main(int argc, char* argv[]) 
 { 
 	char szData[] = "helloworld"; 
    EncryptBlock(szData, strlen(szData), 
    "hello", strlen("hello"));
	return 0; 
 }

观察以上算法我们可以发现:

  • nValue ^ key 就会变为密文
  • 密文 ^ key 变回原文

非常多的加密解密算法中,都使用了异或运算(比如AES、MD5、SHA256、CRC)。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值