Java算法中的 >>>1
来源:互联网 发布:ubuntu登录root 编辑:程序博客网 时间:2024/05/18 11:46
经常在一些算法中看到 num >>> 1的写法,num >>> 1,相当于num除以2,为什么不直接写num除以2呢?因为计算机中的数据是以二进制的形式存储的,数学运算的加减乘除底层也是二进制移位实现的,直接在二进制上移位,显然要比数学运算来的更直接。
来看一下Java中的移位运算符,有三种:
<<
: 左移运算符,num << 1,相当于num乘以2 >>
: 右移运算符,num >> 1,相当于num除以2 >>>
: 无符号右移运算符,num >>> 1,相当于num除以2,忽略符号位,空位都以0补齐
示例:
int num = 8; int num1 = num << 1; //num1 = 16 int num2 = num >> 1 ; //num2 = 4 int num3 = num >>> 1; //num3 = 4
注意:无符号右移运算符忽略了最高位的符号位,0补最高位,并且无符号右移运算符 >>> 只对32位和64位的数值有意义。Java中只有这三种位移,没有向左的无符号位移。
int num = -8; int num1 = num << 1; //num1 = -16 int num2 = num >> 1 ; //num2 = -4 int num3 = num >>> 1; //num3 = 21 4748 3644
为什么 num3 是 21 4748 3644 这么个数?因为数值在计算机中是以补码的形式的存储的,-8的补码是 [11111111 11111111 11111111 11111000],右移一位则变成了 [01111111 11111111 11111111 11111100],最高位的1表示负数,0表示正数,>>>
时0补最高位的符号位,[01111111 11111111 11111111 11111100] 的十进制就是21 4748 3644。在正数位移的时候,>>
和 >>>
是一样的,在负数位移的时候就不一样了。
Java算法中的 >>>1 与 /2 是等效的,前者运算效率高,后者运算级别高。
阅读全文
0 0
- Java算法中的 >>>1
- JAVA中的细节-算法篇(1)
- java中的排序算法
- java中的算法
- Java中的常用算法
- java中的排序算法
- Java中的计算器算法
- Java中的MD5算法
- java中的算法
- Java中的常见算法
- Java中的递归算法
- Java中的垃圾回收算法
- java中的各种排序算法
- 浅谈Java中的排序算法
- java 中的常用排序算法
- Java中的垃圾收集算法
- Java中的垃圾回收算法
- Java中的经典排序算法
- 什么是内存溢出与内存泄露,几种常见导致内存泄露的写法
- 第十一周 --项目一“图基本算法库”
- CSDN怎样转载别人文章
- Zmap安装教程
- java实验总结
- Java算法中的 >>>1
- Codeforces Beta Round #17 C. Balance DP
- RNN公式推导
- 213. House Robber II
- 牛客练习赛7
- JVM内存区域与内存分配
- gradle配置,读spring源码时发现spring项目是gradle构建的
- spark学习-49-Spark的job调度
- android 滑动控件嵌套的问题