`
geeksun
  • 浏览: 968134 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

位移运算

阅读更多

&:位与运算符
位与运算符,用来比较 0101 这样的二进制数,也可以比较boolean 值;
&&: 逻辑与运算符,只能比较boolean值,是短路运算符,有“and”之意。
例如:

int i = 2 & 3;
boolean l = false & true;	//&: 位运算符
System.out.println(i);
System.out.println(l);

boolean j = false && false;	//&&: 逻辑运算符, 短路运算符, 
System.out.println(j);

输出:

2
false
false

可见,& 会计算两边的值,&&当第一个为false时,就不再计算后面的值,就认为结果是false,因为 && 就是要找出所有条件都为 true 的条件,所以只要有一个为 false,就为 false。

 

位移运算符:

<<  为左移, 左移一位把原来的值乘以2。

例如:3 <<2(3为int型) 
1)把3转换为二进制数字0000 0000 0000 0000 0000 0000 0000 0011, 
2)把该数字高位(左侧)的两个零移出,其他的数字都朝左平移2位, 
3)在低位(右侧)的两个空位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 1100, 
转换为十进制是12。

>> 为右移. 右移一位把原来值除以2.

 

位运算:

位运算符包括: 与(&)、或(|)、非(~)、异或(^)

   &:当两边操作数的位同时为1时,结果为1,否则为0。如1100&1010=1000   

      | :两边操作数的位只要有一边为1时,结果为1,否则为0。如1100|1010=1110   

      ~:两边的位0变1,1变0   

      ^:两边的位不同时,结果为1,否则为0。如1100^1010=0110

 

位运算与位移动运算符的一个场景:

    HashMap的功能是通过“键(key)”能够快速的找到“值”。下面我们分析下HashMap存数据的基本流程: 
    1、 当调用put(key,value)时,首先获取key的hashcode,int hash = key.hashCode(); 
    2、 再把hash通过一下运算得到一个int h. 

 static int hash(int h) {
        h ^= (h >>> 20) ^ (h >>> 12);
        return h ^ (h >>> 7) ^ (h >>> 4);
 }

为什么要经过这样的运算呢?这就是HashMap的高明之处。先看个例子,一个十进制数32768(二进制1000 0000 0000 0000),经过上述公式运算之后的结果是35080(二进制1000 1001 0000 1000)。看出来了吗?或许这样还看不出什么,再举个数字61440(二进制1111 0000 0000 0000),运算结果是65263(二进制1111 1110 1110 1111),现在应该很明显了,它的目的是让“1”变的均匀一点,散列的本意就是要尽量均匀分布

  3、 得到h之后,把h与HashMap的承载量(HashMap的默认承载量length是16,可以自动变长。在构造HashMap的时候也可以指定一个长 度。这个承载量就是上图所描述的数组的长度。)进行逻辑与运算,即 h & (length-1),这样得到的结果就是一个比length小的正数,我们把这个值叫做index。这个index就是索引将要插入的值在数组中的位置。第2步那个算法的意义就是希望能够得出均匀的index,这是HashTable的改进,HashTable中的算法只是把key的 hashcode与length相除取余,即hash % length,这样有可能会造成index分布不均匀。还有一点需要说明,HashMap的键可以为null,它的值是放在数组的第一个位置。

  4、 我们用table[index]表示已经找到的元素需要存储的位置。先判断该位置上有没有元素(这个元素是HashMap内部定义的一个类Entity, 基本结构它包含三个类,key,value和指向下一个Entity的next),没有的话就创建一个Entity<K,V>对象,在 table[index]位置上插入,这样插入结束;如果有的话,通过链表的遍历方式去逐个遍历,看看有没有已经存在的key,有的话用新的value替 换老的value;如果没有,则在table[index]插入该Entity,把原来在table[index]位置上的Entity赋值给新的 Entity的next,这样插入结束。

分享到:
评论

相关推荐

    计算机组成原理 带位移运算模型机的设计与实验报告

    计算机组成原理是理解计算机系统内部工作机制的关键课程,其中带位移运算的模型机设计与实验是其重要组成部分。位移运算在计算机科学中扮演着重要角色,它涉及到数据的移动和位操作,广泛应用于算术运算、逻辑运算...

    Windows关于整数二进制位移运算的MFC程序源代码

    在编程领域,特别是C语言和其派生的MFC(Microsoft Foundation Classes)框架中,整数的二进制位移运算是一种重要的算术操作。位移运算符在处理位模式、数据存储、位掩码以及优化计算等方面发挥着关键作用。本程序源...

    数值位移及异或运算计算器

    简单小工具,输入十进制数值计算结果,C# WINFORM版,非源码

    C语言进阶学习资料,关于预处理,文件处理,结构体,位移运算的学习 大学生期末复习资料,程序设计课程复习资料

    本资料集为C语言进阶学习者提供了全面的预处理、文件处理、结构体和位移运算的知识。内容涵盖了从基础语法到高级应用的各个方面,旨在帮助学习者深入理解C语言的核心概念和技术细节。 适用人群 本资料适合具有C语言...

    不错的主要用于加密的vbs(asp)位移运算类

    位移运算在编程中是一种非常基础且重要的操作,特别是在加密算法中。VBS(Visual Basic Script)和ASP(Active Server Pages)是微软开发的脚本语言,常用于Web开发。这个位移运算类是为了在VBS和ASP环境中进行数据...

    运算器移位运算实验实验报告.pdf

    在计算机组成原理的学习中,运算器移位运算实验是一项至关重要的实践内容,它不仅帮助学生深入理解运算器的工作机制,而且对于数据在计算机中的传输和处理流程的理解起到了重要的桥梁作用。该实验的目的是使学生掌握...

    wxh 指针,算术,位移运算开发包部份示例代码[AsmInVB].

    - **内嵌汇编**:当使用内嵌汇编指令时,这些函数会直接调用相应的汇编指令,如 SHR 和 SHL,以更快的速度完成位移操作。 ### 4. Assign 和 AssignZero 子程序 - 指针操作 这两个子程序用于进行指针操作,分别是...

    【循序渐进学.java】从入门到精通.第20讲-二进制.位运算.位移运算.zip

    绝对韩顺平老师的讲解视频!教学文件打包太大,就一个一个的上传了! avi格式的,最好用KMPlayer来播放,下载地址:https://www.kmplayer.com/home 后续还上传,韩顺平老师教学的源代码!

    计算器(可进行移位求余等运算)

    一个简易的计算器(可进行移位求余等运算)

    shell 基本计算、逻辑运算、位运算详解

    以下面的格式提供运算表达式:$(( expression )) $ echo $((5*(3+3))) 30 $ result = $(($myvar-10)) shell提供方便的数之间的进制转换: $ echo $((013))#八进制 $ echo $((0xA4))#十六进制 还可以使用以下格式指定...

    oracle位运算

    本文将详细介绍Oracle中的基本位运算操作,包括与、或、异或、位移等,并提供相应的SQL语句和函数定义。 #### 二、基本位运算 ##### 1. 与 (AND) 与运算符用于比较两个数值的每一位,并返回结果。如果对应位置上...

    10_02.rar_10_02_java 位移

    这个名为"10_02.rar_10_02_java 位移"的压缩包文件,很可能包含了一个Java项目,该项目运用了位移运算来实现特定的功能,这里特别提到了"中点位移法",这可能与分形几何图形的生成有关。 中点位移法(Midpoint ...

    Python一个随机生成四则运算题目的小程序

    这段Python代码实现了一个随机出题的四则运算程序。它包含以下几个函数: 1. `generate_random_number()`: 生成一个随机整数,范围在1到100之间。 2. `generate_random_operator()`: 从加减乘除四个运算符中随机...

    单片机算数运算

    5. **位运算**:位运算,如与(AND)、或(OR)、异或(XOR)和非(NOT),在单片机编程中非常常见,它们可以用来进行数据的位级操作,例如设置或清除特定位,以及进行位移运算。 6. **浮点运算**:如前所述,浮点...

    04_位运算1

    本文将深入探讨位运算的概念,包括与运算、或运算、异或运算,以及位移运算如左移(shl)和右移(shr),并举例说明它们在实际中的应用。 首先,我们来看“与”运算。与运算符是"&",它遵循“全1得1,有0得0”的...

    位运算学习

    5. **位移运算**:左移()和右移(&gt;&gt;)操作可以改变数的位表示。左移一位相当于乘以2,右移一位相当于除以2(对于无符号整数)。在有符号整数的右移中,高位的填充方式取决于具体实现,可能是0(逻辑右移)或符号位...

    alu_16种算术运算_16种逻辑运算_行为级alu实验_啥叫行为级Alu_alu_

    对于16种算术运算,这可能包括基本的加、减、乘、除,以及它们的不同变体,例如带符号的和无符号的运算,以及位移运算。位移运算在处理二进制数据时非常有用,因为它们可以实现快速的乘法和除法。 同样,16种逻辑...

    C#位移的介绍与例子

    其实很简单。。。 C#位移运算符: 左移:&lt;&lt; 右移:&gt;&gt; 位移理解可能简单一些:其实就是数据转换成二...下面用一个曾经回答一个网友的提问来理解一下位移的运算 题目:把89右位移一位: 代码如下:string flag = Co

    JAVA位运算.pdf

    以上代码演示了各种位运算符的功能,包括按位与、按位或、按位异或、按位非以及位移运算。这些操作在实际编程中可用于高效的数据处理和算法实现,尤其在底层系统编程或性能敏感的场景中尤为重要。掌握这些位运算技巧...

    C#2010 按位运算.pdf

    按位运算主要有三种类型:按位逻辑运算、按位取反运算和按位位移运算。 1. **按位逻辑运算**: - **按位与(&)**:对两个整数的二进制表示进行逐位逻辑与运算,如果对应位都是1,则结果位为1,否则为0。 - **按位...

Global site tag (gtag.js) - Google Analytics