java位运算

  java位运算在平常的编码过程中十分场景,通常框架都替我们封装好了,我对于细节方面反而一知半解,下面就重新梳理一下。
优秀的框架使得我们轻松,也使得我们距离真相越来越远。

位运算种类

  • 左移、右移
  • 与或

使用场景

  • 左移、右移

      左移和右移是比较简单的位运算,简单来说,就是把二进制值向左或向右移动
    对于数据来说,左移N位就是乘于2的N次方,右移同理。 举例:
    数值8对于的二进制值为 1000 =(1*2*2*2 + 0*2*2 + 0*2 +0)
    对数值8进行左移1位操作,等于在1000的基础上,左移以为,得到 10000 = (1*2*2*2*2 + 0*2*2*2 + 0*2*2 + 0*2 +0) = 16
    ∴ 左移N位就是乘于2的N次方
  • 与运算 &

    • 二进制值,按位相与,都为1时才为1,其他为0
        举例说明:
      1100011 &
      1001111
      =1000011
    • 对于2的n次方取余,相当于对2的n次方减一取与运算,n为正整数。





    • 对于2的N次方取余 == 对于2的N次方-1取与
      • 2的N次方为 10000, 2的N次方-1为 1111
    • 基于上面的结论,来看待HashMap的扩容机制
      • HashMap扩容时,size的大小为2的N次方,有两个原因

        • 扩容时,重新计算数据的位置,变化较小
        • size为2的N次方时,计算位置可以使用[hash & (n - 1)],效率更高
  • 或运算 |

    • 二进制值,按位相或。有一个为1,则为1

java位运算分析的更多相关文章

  1. Java 位运算2-LeetCode 201 Bitwise AND of Numbers Range

    在Java位运算总结-leetcode题目博文中总结了Java提供的按位运算操作符,今天又碰到LeetCode中一道按位操作的题目 Given a range [m, n] where 0 <= ...

  2. Java位运算总结:位运算用途广泛《转》

    前天几天研究了下JDK的Collection接口,本来准备接着研究Map接口,可是一查看HashMap类源码傻眼咯,到处是位运算实现,所以我觉得还是有必要先补补位运算知识,不然代码看起来有点费力.今天 ...

  3. Java位运算原理及使用讲解

    前言日常开发中位运算不是很常用,但是巧妙的使用位运算可以大量减少运行开销,优化算法.举个例子,翻转操作比较常见,比如初始值为1,操作一次变为0,再操作一次变为1.可能的做法是使用三木运算符,判断原始值 ...

  4. (转)java位运算

    转自:http://aijuans.iteye.com/blog/1850655 Java 位运算(移位.位与.或.异或.非)   public class Test { public static ...

  5. Java位运算总结:位运算用途广泛

    前天几天研究了下JDK的Collection接口,本来准备接着研究Map接口,可是一查看HashMap类源码傻眼咯,到处是位运算实现,所以我觉得还是有必要先补补位运算知识,不然代码看起来有点费力.今天 ...

  6. Java 位运算超全面总结

    1.原码.反码.补码 关于原码.反码.补码的相关知识作者不打算在这里长篇大论,相关知识已有别的大佬总结很好了,还请老铁自行 Google,不过有篇知乎回答是作者学编程以来见过对相关知识最通俗易懂,生动 ...

  7. 我们必须要了解的Java位运算(不仅限于Java)

    本文原创地址为 https://www.cnblogs.com/zh94/p/16195373.html 原创声明:作者:陈咬金. 博客地址:https://www.cnblogs.com/zh94/ ...

  8. leetcode:single-number-ii(Java位运算)

    题目 Given an array of integers, every element appears three times except for one. Find that single on ...

  9. Java位运算实现加减乘除四则运算

    本文是继<一文了解有趣的位运算>的第二篇文章. 我们知道,计算机最基本的操作单元是字节(byte),一个字节由8个位(bit)组成,一个位只能存储一个0或1,其实也就是高低电平.无论多么复 ...

  10. Java位运算经典实例

    一 源码.反码.补码 正数的源码.反码.补码相同,例如5:            5的源码:101            5的反码:101            5的补码:101 负数的源码.反码.补 ...

随机推荐

  1. 深入解读.NET MAUI音乐播放器项目(三):界面交互

    UI设计的本质是对于产品的理解在界面中多种形式的映射,当需求和定位不同时,对相同的功能表达出了不同的界面和交互方式. 作为播放器,界面可以是千差万别的.<番茄播放器>的iOS平台上我开发了 ...

  2. Cesium渲染模块之VAO

    1. 引言 Cesium是一款三维地球和地图可视化开源JavaScript库,使用WebGL来进行硬件加速图形,使用时不需要任何插件支持,基于Apache2.0许可的开源程序,可以免费用于商业和非商业 ...

  3. GeoServer在Linux上源码安装、启动、发布地图服务

    1. 环境准备 笔者此次使用的Linux系统是CentOS 8 ,没错,目前已经停止维护,但就操作而言,和其他Linux发行版大同小异 目前的GeoServer版本是2.21 1.1 Git环境 yu ...

  4. Java语法基础课程总结

    1.运行实例EnumTest.java并分析 结论:枚举类型属于引用类型,不属于原始数据类型它的每一个具体值都引用一个特定的对象,可以使用"=="直接比较枚举变量的值,枚举是可以从 ...

  5. 【磐河旅行】之酒店API接口对接实录

    1.项目需求概述: 通过对接第三方磐河旅行的酒店API接口实现在我们的APP .微信小程序.H5上可提供用户酒店查询.酒店预订.退订等功能.效果如下图: 2.酒店接口功能拆分 除了酒店静态数据字典(如 ...

  6. pyinstaller打包Python程序报错OSError: Python library not found: libpython3.8.so, libpython3.8m.so

    重新编译python(不影响原来安装的库文件),加入--enable-shared ./configure --prefix=/usr/local/python3 --enable-shared然后m ...

  7. ShareWAF 软件&云形态安装部署说明

    一.常用文件说明sharewaf.js:主程序daemon.js:主程序守护程序oem.js:OEM 定制文件developer.js:二次开发接口rules.js:自定义规则文件regexp.js: ...

  8. @NotNull,@NotBlank,@NotEmpty注解的区别

    开发中常看见@NotNull,@NotBlank,@NotEmpty三个注解,但却没有深入了解过,下面介绍一下他们的应用场景和区别 @NotNull:主要用在基本数据类型上(Int,Integer,D ...

  9. s-hr实现单点登录,看我这份笔记就够了!!!

    https://pan.kingdee.com/s/MTA5ODk4NyxjNzk1来自:云之家企业云盘

  10. vue element 日期范围选择器限制:只能选今天之前的时间 || 只能选今天之后的时间 || 选取今天往后三天内

    举例:只能选今天或者今天之后的时间(如下图) <el-date-picker clearable v-model="form.limitTime" type="da ...