位运算小技巧

本文介绍了位运算的基本概念和常用技巧,包括按位与、按位或、按位异或、取反、位移等操作,并通过实例展示了如何利用位运算实现数的交换、快速乘/除2的幂次、计算二进制中0或1的个数以及判断一个数是否为2的整数次幂。
摘要由CSDN通过智能技术生成

引言: 位运算就是直接对二进制进行操作, 不管是在Java语言,还是在C语言中,或者其他语言等等都是经常会用到的,本文以Java语言来举例子,展示和分析了位运算的使用和技巧。

1 位运算

1.1 基本概念

位运算主要包括按位与(&)、按位或(|)、按位异或(^)、取反(~)、左移(<<)、右移(>>)、无符号右移(>>>)这几种,其中除了取反(~)以外,其他的都是二元运算符,即要求运算符左右两侧均有一个运算量。

概念: 位运算就是使用位运算符直接对整数在内存中的二进制位进行操作(参百度百科).
关于补码和原码: 在计算机中,整数是按原码(二进制)存的, 负数是按补码存的, 整数的补码和原码相同, 负数的补码等于原码取反后再加一
示例:

3(正数的补码和原码相同)
原码:0000 0011
补码:0000 0011
-3(负数的补码等于原码取反后再加1)
原码:0000 0011
补码:1111 1101int型的-3可以表示为0b11111111_11111111_11111111_11111101

1.2 位运算符的使用

按位与(&):
使两个数对应的比特位进行按位与操作, 对应位同时为1, 其对应位的结果才为1

0000 1111
1111 1111
--------------------
0000 111115&255 = 1111 

按位或(|):
使两个数对应的比特位进行按位或运算, 对应位只要有一个1就为1, 否则为0

0000 1111
1111 1111
---------------------
1111 111115|255 = 11111111

按位异或(^):
两个数对应比特位相同为0, 不同为1

0000 1111
1111 1111
---------------------
1111 000015^255 = 1111 0000;

取反(~):
取反运算是个一元运算符, 对某个数进行取反运算, 使二进制的0变成1, 而1变成0

~15 ===> ~0b0000_1111 ===>1111 0000

左移(<<):
左移即将二进制数向左移n位. 某个数向左移1位相当于乘于2, 左移2位相当于乘于4, 以此类推向左移n位则这个数就乘于2^n

0000 1111<<2
--------------------------
0011 1100    <=> 15 
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值