【C位运算&基础+面试题】位运算中阶详解及面试题(下)

简介: 【C位运算&基础+面试题】位运算中阶详解及面试题

2-3.按位异或^

深入点了解^:纯粹的按位或

🎈规则:

逐比特位,相同为0,不同为1

406171a1b281472281373131cfd851f7.png

5960da1d23414b19a1e61b339a83a3e0.png

🎈刷题翻译:

支持结合律和交换律


1c2460488d3847a292f853662ff271ca.png

任何数和0异或,都是他本身


34d4b43694aa4bef8f799b654067c585.png

🎈用法:

int c=3^5;//为例
printf("%d",c);

图示:


9b6db51e64b14125b4fd09d9f3896d78.png

🎈代码结果:


4791ea5be054481499a36b59322b7ce0.png

三. 三道实战题

3-1.求一个正数的二进制序列中有几个1

🎈思路:n = n & (n - 1);

🚗1.设这个正数n,n-1就是使n-1的二进制的原码/补码少1;

🚗2.再将n与n-1按位与,由按位与的性质,n和n-1的二进制的最后一位一定相差1,肯定就是一个1,一个0,按位与后就是0,每进行一次就使得n减少一个1;

🚗3.给个循环,当n全为0时结束,最后循环的次数就是这个正数的二进制序列中有几个1。


🎈图示:


5dda5a93ea5648f4bfdb210506638ebf.png

53359df8eb5f4a43805ec288dad006a2.png

代码:

#include<stdio.h>
int main1()
{
  //1.求一个正数的二进制序列中有几个1
  int n = 0, count=0;
  scanf("%d", &n);
  while (n)
  {
    n = n & (n - 1);
    count++;
  }
  printf("这个数的二进制序列中有%d个1", count);
  return 0;
}

🎈运行结果:

cf7a123405124b80897bf433de472659.png

3-2.现有两个正数m,n,m的二进制序列要改变多少多少处可以得到n

🎈整体思路:


🚗1.先进行异或操作 如c=a^b; c得到的是a,b变量二进制中不同的地方,标记为1(a,b均为正数)

🚗2。相当于求异或后不同之处(已标记为1)1的个数,即为题一思路


🎈代码:

#include<stdio.h>
int main()
{
  // 2.现有两个正数m,n,m的二进制序列要改变多少多少处可以得到n
  int m = 0, n = 0, temp = 0, count = 0;
  scanf("m=%d n=%d", &m, &n);
  temp = m ^ n;
  while (temp)
  {
    temp = temp & (temp - 1);
    count++;
  }
  printf("m的二进制序列要改变%d处可以得到n", count);
}

🎈结果:


ba4e9657290b4932af6fcbc05e447d8f.png

3-3.不使用第三个变量,交换两个数的值(答案😇)

🎈代码:

#include<stdio.h>
int main()
{
  //3.不使用第三个变量,交换两个数的值(答案😇)
  int a=0, b=0;
  scanf("a=%d b=%d", &a, &b);;
  printf("交换前:a=%d\tb=%d\n", a, b);
  a = a ^ b;
  b = a ^ b;
  a = a ^ b;
  printf("交换后:a=%d\tb=%d\n", a, b);
  return 0;
}

🎈图示:


0ba43369a11b4758bdca3dd07287f923.png


🎈运行结果:


0c0d8415653e4141accc3c00ffe81efc.png


最后,到这里就结束了,码字不易,耗时耗力,欢迎三联一波。🙌🙌🙌

想了解更多位运算的应用题目,速戳位运算题目合集

❤️关注我一起成长 ❤️



目录
相关文章
|
6月前
|
算法 Java 调度
《面试专题-----经典高频面试题收集四》解锁 Java 面试的关键:深度解析并发编程进阶篇高频经典面试题(第四篇)
《面试专题-----经典高频面试题收集四》解锁 Java 面试的关键:深度解析并发编程进阶篇高频经典面试题(第四篇)
75 0
|
6月前
|
存储 Java
java面试题大全带答案_面试题库_java面试宝典2018
java面试题大全带答案_面试题库_java面试宝典2018
|
6月前
|
存储 设计模式 Java
java实习生面试题_java基础面试_java面试题2018及答案_java面试题库
java实习生面试题_java基础面试_java面试题2018及答案_java面试题库
|
6月前
|
SQL 算法 安全
java面试宝典_java基础面试_2018java面试题_2019java最新面试题
java面试宝典_java基础面试_2018java面试题_2019java最新面试题
|
6月前
|
算法 安全 网络协议
java高级面试题_java面试题大全带答案_线程面试题_java面试宝典2019
java高级面试题_java面试题大全带答案_线程面试题_java面试宝典2019
|
5月前
|
存储 安全 Java
Java面试题:Java内存管理、多线程与并发框架:一道综合性面试题的深度解析,描述Java内存模型,并解释如何在应用中优化内存使用,阐述Java多线程的创建和管理方式,并讨论线程安全问题
Java面试题:Java内存管理、多线程与并发框架:一道综合性面试题的深度解析,描述Java内存模型,并解释如何在应用中优化内存使用,阐述Java多线程的创建和管理方式,并讨论线程安全问题
48 0
|
5月前
|
存储 并行计算 安全
Java面试题:Java内存管理、多线程与并发框架的面试题解析与知识点梳理,深入Java内存模型与垃圾回收机制,Java多线程机制与线程安全,Java并发工具包与框架的应用
Java面试题:Java内存管理、多线程与并发框架的面试题解析与知识点梳理,深入Java内存模型与垃圾回收机制,Java多线程机制与线程安全,Java并发工具包与框架的应用
86 0
|
6月前
|
XML Java 数据库连接
面试必备!Java核心技术100+面试题
面试必备!Java核心技术100+面试题
|
6月前
|
安全 Java 中间件
《面试专题-----经典高频面试题收集一》解锁 Java 面试的关键:深度解析常见高频经典面试题(第一篇)
《面试专题-----经典高频面试题收集一》解锁 Java 面试的关键:深度解析常见高频经典面试题(第一篇)
51 0
|
6月前
|
安全 Java API
《面试专题-----经典高频面试题收集三》解锁 Java 面试的关键:深度解析并发编程基础篇高频经典面试题(第三篇)
《面试专题-----经典高频面试题收集三》解锁 Java 面试的关键:深度解析并发编程基础篇高频经典面试题(第三篇)
44 0