问:说说你知道位运算可以做哪些事情,即位运算有哪些妙用?

答:一提起位运算,大家都会想到它的高效性,无论是嵌入式编程还是优化系统的核心代码,适当的运用位运算总是即节约又优雅。Java 中共有 7 个位运算符,分别是 ~(取反)、&(与)、|(或)、^(异或)、>>(右移)、<>>(无符号右移),具体常见妙用如下。

1. 对称加密

其实现原理是一个数异或同一个数两次还是原数,样例代码如下:

public static String encode(String source, int key) {

byte[] b = source.getBytes("UTF-8");

for (int i=0, size=b.length; i

for (byte keyBytes0 : keyBytes) {

b[i] = (byte) (b[i]^key);

}

}

return new String(b);

}

如上代码可以将 source 字符串加密成一个新串,解密时将加密过的字符串还用上面方法传给 source 即可得到加密前的字符串,这样就成了用 key 实现的对称加密。

2. 乘除幂运算

具体样板代码展示如下:

//计算n*2

int mulTwo(int n) {

return n << 1;

}

//除以2,负奇数的运算不可用

int divTwo(int n) {

return n >> 1;//除以2

}

//计算n*(2^m),即乘以2的m次方

int mulTwoPower(int n,int m) {

return n << m;

}

//计算n/(2^m),即除以2的m次方

int divTwoPower(int n,int m) {

return n >> m;

}

3. 奇偶判断

具体样板代码展示如下:

//判断数值的奇偶性

boolean isOddNumber(int n){

return (n & 1) == 1;

}

4. 不增加新变量的情况下交换两个变量的值

比较常考,具体样板代码展示如下:

//常规交换方式

int temp;

temp = a;

a = b;

b = temp;

//基于位运算的方式

a = a ^ b;

b = a ^ b; //实际上是(a^b)^b,也就是a异或了b两次,等号右边是a的值。

a = a ^ b;

5. 十进制转十六进制

具体样板代码展示如下:

public static String decimalToHex(int decimal) {

String hex = "";

while (decimal != 0) {

int hexValue = decimal % 16;

hex = toHexChar(hexValue) + hex;

decimal = decimal / 16;

}

return hex;

}

//将0~15的十进制数转换成0~F的十六进制数

public static char toHexChar(int hexValue) {

if(hexValue <= 9 && hexValue >= 0) {

return (char)(hexValue + '0');

} else {

return (char)(hexValue - 10 + 'A');

}

}

此外,按位与运算还支持清零运算、取一个数中某些指定位等操作。此外还有其他用法可自行脑补,反正希望通过上面的视野可以让你知道以后阅读源码中那些位运算操作时知道是什么意思即可。

位运算 取某一位 java_Java 位运算妙用相关推荐

  1. java位运算符取反_Java运算符之位运算符

    位运算符 尹成课程资料及演示(免费)(文末有资料链接) 位运算符是针对二进制数的每一位进行运算的符号,它是专门针对数字0和1进行操作的.接下来通过一张表来展示Java中的位运算符及其用法,如表1所示. ...

  2. 位运算+取某一位+java_Java位运算小节

    2019新春支付宝红包技术大揭秘在线峰会将于03-07日开始,点击这里报名届时即可参与大牛互动. 位运算表达式由操作数和位运算符组成,实现对整数类型的二进制数进行位运算.位运算符可以分为逻辑运算符(包 ...

  3. 位运算符取反_Java常见的运算符——位运算

    位运算符 <<左移 先说左移运算符,它的符号表示是<< 举个例子,先定义一个int类型的数,十进制的value = 733183670,转换成二进制在计算机中的表示如下(int ...

  4. python中不同进制的整数之间可以直接运算_Python 进制转换、位运算

    一.进制转换 编程用十进制,十进制转换为二进制.八进制.十六进制 In [135]: bin(23) Out[135]: '0b10111' In [136]: oct(23) Out[136]: ' ...

  5. java位运算符取反_java运算符

    Java 语言支持如下运算符: 算术运算符: +,-,*,/,%,++,-- 赋值运算符 = 关系运算符: >,<,>=,<=,==,!=, instanceof 逻辑运算符: ...

  6. 《位运算技巧以及Leetcode的一些位运算题目》

    目录 技巧 练习位运算 [461. 汉明距离](https://leetcode-cn.com/problems/hamming-distance/) [190. 颠倒二进制位](https://le ...

  7. python 整数逆位运算_Python 进制转换、位运算

    一.进制转换 编程用十进制,十进制转换为二进制.八进制.十六进制 In [135]: bin(23) Out[135]: '0b10111' In [136]: oct(23) Out[136]: ' ...

  8. c语言位运算负数的实例_负数位运算的右移操作-C语言基础

    这一篇探讨的是"负数位运算的右移操作",涉及到数据的源码.反码.补码的转换操作.属于C语言基础篇. 先看例子 #include int main(void) { //正数的位右移 ...

  9. python求个位十位百位_Js 分别取一个数的百位,十位,个位

    var num=654; var baiwei=parseInt(num/100); //6.54取整 得到百位6 console.log(baiwei); var shiwei=parseInt(( ...

  10. c语言位运算负数的实例_C语言位运算符(附例题讲解)

    C语言提供了六种位运算符: & 按位与 | 按位或 ^ 按位异或 ~ 取反 << 左移 >> 右移 12.1.1 按位与运算 按位与运算符 "&&qu ...

最新文章

  1. Java通过JDBC来连接SqlServer数据库
  2. MySQL注射绕过技巧(三)
  3. http 302错误_http面试题
  4. ocupload完成文件上传(一键上传)
  5. MinIO部署快速入门
  6. 函授计算机大专自我鉴定100字,函授大学毕业自我鉴定100字(精选5篇)
  7. 仓库码放要求_仓储管理的全流程SOP操作示范,你们公司仓库管理规范吗?
  8. eclipse常见小问题
  9. 【剑指Offer】18树的子结构
  10. SpringMVC→简介、MVC、SpringMVC工作原理、Maven搭建第一个SpringMVC、请求参数接收、重定向、文件上传、AJAX异步访问、请求参数接收绑定JSON、@注解及传参
  11. linux系统下Opencv4.1.1编译安装,以及增加子函数和python中调用
  12. golang变量的注意
  13. unity webPlayer
  14. 煲机:让耳机的声音更动听!
  15. Evasion Attack in Adversarial Machine Learning
  16. Twitter、Google背后的“卖水人”,力盟科技也来港股分一杯羹?
  17. Xmind怎么打开?在线转换成PNG,JPG图片格式,无需安装其他软件
  18. 如何用一句话激怒互联网人?
  19. linux用户读取文件过程,Python中读取写入文件并进行文件与用户交互的操作
  20. java递归堆栈溢出_【java】递归次数过多导致堆栈溢出

热门文章

  1. linux fedora frebsd centos linux as 安装出错
  2. Java中成员变量、局部变量和静态变量的区别
  3. 计算机电缆执行标准是什么,DJYVP计算机电缆执行标准
  4. php 上传图片转base64格式,PHP实现本地图片转base64格式并上传
  5. devc 能优化吗_小网站能做seo优化吗?如何为小公司网站做seo优化?
  6. python 读grid 数据_jqGrid获取到python返回的Json数据,未能显示到页面上,为毛???...
  7. mysql in 索引_项目中常用到的 19 条 MySQL 优化
  8. python多进程优化_python多进程提高cpu利用率
  9. python怎样编写定时程序_如何用Python写一个每分每时每天的定时程序
  10. 谷歌浏览器的笔记在哪里_selenium学习笔记之启动谷歌浏览器