算法篇:位运算基本操作
时间:2022-07-25
本文章向大家介绍算法篇:位运算基本操作,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
算法:
本章介绍位操作的基本操作,具体操作见下面的几类具体题目:
异或操作,与操作,或操作和偏移操作
题目1: 计算位1的个数
https://leetcode-cn.com/problems/number-of-1-bits/
代码实现:
func hammingWeight(num uint32) int {
count := 0
for i := 0; i < 32; i++ {
if num&(1<<i) != 0 {
count++
}
}
return count
}
// 算法:
// 利用单个bit上面的 a&1=1 表示a=1;a&1=0 表示a=0
执行结果:
题目2:2的幂
https://leetcode-cn.com/problems/power-of-two/
代码实现:
func isPowerOfTwo(n int) bool {
if n == 0 {
return false
}
return n&(n-1) ==0
}
// 算法:
// 2的幂转换成二进制,如下图所示,所以可以利用n&(n-1) == 0 来判断
// 0000 0001 ->1
// 0000 0010 ->2
// 0000 0100 ->4
// 0000 1000 ->8
// 0001 0000 ->16
// 0010 0000 ->32
// 0100 0000 ->64
// 1000 0000 ->128
执行结果:
题目3: 两个整数的和
https://leetcode-cn.com/problems/sum-of-two-integers/
代码实现:
func getSum(a int, b int) int {
// b作为进位,当为0的时候,说明计算结束
for b != 0 {
sum := a ^ b // 不进位的加法
carry := (a & b) << 1 // 计算进位
a = sum
b = carry
}
return a
}
// 算法:
// 1. 异或操作,a^b 得到的结果,a+b不进位的和的数值
// 2. 与操作,a&b向右偏移1位,表示的就是进位数值
// 3. 循环操作,直到进位数为0,表示计算结束了。
执行结果:
题目4:
https://leetcode-cn.com/problems/swap-numbers-lcci/
代码实现:
func swapNumbers(numbers []int) []int {
numbers[0] ^= numbers[1]
numbers[1] ^= numbers[0]
numbers[0] ^= numbers[1]
return numbers
}
// 算法:
// 交换a,b,位操作步骤:a ^=b; b ^= a; a ^= b;
执行结果:
- 【面试虐菜】—— JAVA面试题(3)
- Carousel 旋转画廊特效的疑难杂症
- 区块链为IBM与Visa等老牌公司注入新的生机
- 【java.lang.UnsupportedClassVersionError】版本不一致出错
- Yeoman 官网教学案例:使用 Yeoman 构建 WebApp
- JSP与JavaBeans
- Log4j官方文档翻译(四、如何在java中输出日志消息)
- 展望未来:使用 PostCSS 和 cssnext 书写 CSS
- Java多线程之Runable与Thread
- 关于 devbridge-autocomplete 插件多选操作的实现方法
- node-sass 安装失败的解决措施
- JavaMelody监控SQL
- 关于jboss的线程问题+java.lang.outofmemoryError
- 《了不起的 nodejs》中 TwitterWeb 案例 bug 解决
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法