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

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

本篇基础:需要你要对正负数的二进制序列的原反补码有所了解。


测试题:

先来一道测试题看看你究竟掌握了没有:


品茗股份有限公司的一道面试题:


不使用第3个变量的情况下,交换2个数的大小。 例如: 交换前:a=3,b=5; 交换后:a=5,b=3;


给你几分钟,如果做不出来的话,就听博主给你娓娓道来。(😇答案在文末)


一. 按(二进制)位操作符


正数和负数需先转换成相应的二进制的补码,再进行移位运算

操作对象:补码


1-1.左移操作符<<(乘法)


🎈用法:


int a=7<<1;//为例


规则:

将a的二进制序列的补码左移动1位,左边丢弃,右边补0

🎈图示:


82acf3192f264f5f9c72d591412d7c4c.png

🎈代码结果:


fc7152592b8641ffa7353a120d62073c.png

1-2.右移操作符>>(除法)

🎈用法:

int a=-7>>1;//为例
• 1

🎈规则:

将a的二进制序列的补码右移动1

至于后续操作是什么呢?以下有如下两种公认的两种说法:

算术右移:右边丢弃,左边补原符号位

逻辑右移:右边丢弃,左边补0

🎈图示:

25dc06996cb047a688cab0dde5c655cd.png


🎈代码结果:(我的编译器支持的是算术右移)


09bf8464b5074c508c8368c92a31c669.png


1-3.除乘二小技巧

🎈备注:按位操作符:

按位操作的正数m<<位移的位数n = m乘以2的n次方 按位操作的正数m>>位移的位数n = m除以2的n次方

🎈最常用的当然是乘2除2的操作:(这个的运行是时间比/*2快,推荐使用

🎈代码结果:


6095ed2744104b1a940c396507505ece.png


二.(二进制)位操作符

操作对象:补码

2-1按位与&(类似乘法)

🎈技巧:

相当于乘法

🎈规则:

只有两个数的二进制的补码同时为1,结果才为1,否则为0


e015b3f7a1e04026bed4b72bfcd6200e.png

用法:


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


图示:

747c8a9427f44930a6fbf0f9f871bac6.png🎈代码结果:


ab6543196d644f0da2747779a4bcfe44.png

2-2.按位或(类似加法)

🎈技巧:

相当于加法

🎈规则:

只有两个数的二进制的补码同时为0,结果才为0,否则为1

167e0c13fae741e99de8f1a5e13c3aba.png


刷题技巧:

  1. 👌 0|5,0|7 任何数和0|保持不变
  2. 👌 1|5,1|7 任何数和1|被设置为1

🎈用法:

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


图示:


3362fef2c40643c4a6fd8844e921a24b.png

🎈代码结果:


3a0d000f7cfa4871af2984033315a94e.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