草庐IT

异或门

全部标签

2022 蓝桥杯C++A组——选数异或

文章目录题目需要知道的异或解题思路代码题目需要知道的异或首先说一下异或这个小可爱。异或就是不同的返回1,相同的返回0。比如:100100^000101那么很容易得到如果是一个数和它自己异或,得到的铁定是0,(自己和自己的每个二进制位当然是一模一样的),而一个数异或0得到的肯定是它自己,因为二进制0异或0还是得到0,二进制1异或0还是得到1,所以异或0前后没有改变。另外还有一个结论如果a^b=x那么a^x=b这个结论是解决这道题的关键。推论如下:∵a^b=x∴a^b^b=x^b又∵一个数异或它自己等于0,一个数异或0等于它自己∴a^b^b=a^0=a=x^b∴如果a^b=x,那么a^x=b解题思

2022 蓝桥杯C++A组——选数异或

文章目录题目需要知道的异或解题思路代码题目需要知道的异或首先说一下异或这个小可爱。异或就是不同的返回1,相同的返回0。比如:100100^000101那么很容易得到如果是一个数和它自己异或,得到的铁定是0,(自己和自己的每个二进制位当然是一模一样的),而一个数异或0得到的肯定是它自己,因为二进制0异或0还是得到0,二进制1异或0还是得到1,所以异或0前后没有改变。另外还有一个结论如果a^b=x那么a^x=b这个结论是解决这道题的关键。推论如下:∵a^b=x∴a^b^b=x^b又∵一个数异或它自己等于0,一个数异或0等于它自己∴a^b^b=a^0=a=x^b∴如果a^b=x,那么a^x=b解题思

Python实现字符串与指定密钥循环异或加解密

异或运算在很多密码学算法中都有不同程度的应用,其运算特定在于一个数和另一个数连续异或两次仍得到原来的数。在实际使用中,因为要加密的信息和所使用的密钥在大多数情况下是不等长的,所以经常需要循环使用密钥。defcrypt1(source,key):  '''source是要加密或解密的字符串,key是密钥字符串'''  #result用来存放最终结果  #index表示当前使用的密钥字符索引  result=''  index=0  #遍历字符串中的每个字符  forchinsource:    #循环使用密钥字符串中的每个字符    #如果已到最后一个字符,再从0重新开始    ifindex=

Python实现字符串与指定密钥循环异或加解密

异或运算在很多密码学算法中都有不同程度的应用,其运算特定在于一个数和另一个数连续异或两次仍得到原来的数。在实际使用中,因为要加密的信息和所使用的密钥在大多数情况下是不等长的,所以经常需要循环使用密钥。defcrypt1(source,key):  '''source是要加密或解密的字符串,key是密钥字符串'''  #result用来存放最终结果  #index表示当前使用的密钥字符索引  result=''  index=0  #遍历字符串中的每个字符  forchinsource:    #循环使用密钥字符串中的每个字符    #如果已到最后一个字符,再从0重新开始    ifindex=

C 关于使用异或运算交换两数的值

异或运算可以达到交换两数的目的,代码如下:voidswap(int&a,int&b){a=a^b;b=a^b;a=a^b;}但不推荐使用这种方式,附上常用的临时变量方法对比说明。临时变量方法:voidswap(int&a,int&b){inttmp=a;a=b;b=tmp;}对于临时变量法,每次赋值只要读取一个变量的值到寄存器,然后再从寄存器写回到另一个变量中即可,前后涉及两次内存写入操作;但是对于异或运算操作,每次都需要读取两个数据到寄存器中,再进行运算操作,之后把结果写回到变量中,前后共需要三次内存写入操作。另外一点,异或操作的代码可读性差。如果使用C语言实现上述两种方法,并用gcc编译器

C 关于使用异或运算交换两数的值

异或运算可以达到交换两数的目的,代码如下:voidswap(int&a,int&b){a=a^b;b=a^b;a=a^b;}但不推荐使用这种方式,附上常用的临时变量方法对比说明。临时变量方法:voidswap(int&a,int&b){inttmp=a;a=b;b=tmp;}对于临时变量法,每次赋值只要读取一个变量的值到寄存器,然后再从寄存器写回到另一个变量中即可,前后涉及两次内存写入操作;但是对于异或运算操作,每次都需要读取两个数据到寄存器中,再进行运算操作,之后把结果写回到变量中,前后共需要三次内存写入操作。另外一点,异或操作的代码可读性差。如果使用C语言实现上述两种方法,并用gcc编译器