【漫步刷题路】-位运算-求1到n异或的结果

简介: 规律总结:每四个数是一个循环且循环规律为: 1 ,n+1 ,0, n

7a34fe554b7c48f0adc8a6f690934cc1.png

要求

求1^2 …^n的结果


异或的特点分析:

**异或的特点:**对应比特位进行异或,对应比特位相同结果为0,不同为1

  • 异或满足交换律和结合律
  • a^a = 0 -> 任何数和自己异或,结果为0
  • a^0 = a ->和0异或的结果为本身
  • a^b = b^a ->异或满足交换律
  • a ^ b ^ c = a ^(b ^ c) = (a ^ b)^ c ->异或满足结合律
  • d = a ^ b ^ c 可以推出 a = d ^ b ^ c ->->异或满足结合律
  • a ^ b ^ a = b ->异或满足自反行性

找规律

找规律:从1 ^ 2 …^n

0异或任何数等于其本身,所以相当于:0 ^ 1 ^ 2n

0^1 = 1
1^2 = 3
1^2^3 = 0
1^2^3^4 = 4
1^2^3^4^5 = 1
1^2^3^4^5^6 = 7  
1^2^3^4^5^6^7 = 0
1^2^3^4^5^6^7^8 = 8

可以得出

规律总结:

每四个数是一个循环

且循环规律为: 1 ,n+1 ,0, n


用结论秒杀:

所以:问:115 结果为?

n = 15  15%4 = 3   
 根据(1 n+1 0 n)    所以结果为0

问:11002结果为??

1002%4 = 2   
根据(1,n+1,0,n)  所以结果为:n + 1 = 1002 + 1=1003

代码

int main()
{
  //产生1-n的异或值
  int i = 1;
  int n = 0;
  printf("请输入从1-?连续异或?中的值:>");
  scanf("%d", &n);
  int x = 0;//记录1异或n的结果
  for (i = 1; i <= n; i++)
  {
    x ^= i;
  }
  printf("1->%d连续异或的结果为:%d\n", n, x);
  return 0;
}
```
相关文章
|
6月前
|
消息中间件 Kubernetes NoSQL
剑指offer常见题 - 位运算问题(二)
剑指offer常见题 - 位运算问题(二)
|
6月前
|
消息中间件 Kubernetes NoSQL
剑指offer常见题 - 位运算问题(一)
剑指offer常见题 - 位运算问题(一)
|
5月前
|
存储 自然语言处理 算法
位运算入门及简单算法题的应用
位运算入门及简单算法题的应用
46 1
|
6月前
|
算法
【一刷《剑指Offer》】面试题 11:数值的整数次方
【一刷《剑指Offer》】面试题 11:数值的整数次方
|
6月前
|
算法 测试技术 C#
【数学】【位运算】LeetCoce810. 黑板异或游戏
【数学】【位运算】LeetCoce810. 黑板异或游戏
|
算法 C++ Python
每日算法系列【LeetCode 810】黑板异或游戏
每日算法系列【LeetCode 810】黑板异或游戏
位运算:题集
1.a^b(快速幂) 题目: 求 a 的 b 次方对 p 取模的值。
99 0
|
算法 前端开发 程序员
「LeetCode」231-2的幂⚡️
「LeetCode」231-2的幂⚡️
104 0
「LeetCode」231-2的幂⚡️
|
机器学习/深度学习 算法 前端开发
「LeetCode」65-有效数字⚡️
「LeetCode」65-有效数字⚡️
125 0
「LeetCode」65-有效数字⚡️