>>右移

  右移,道在二进制中,假设用一个32位的Int表示一个64,那么高位就都是0,所以当我们把整个二进制数右移,如0100000 >> 2 = 0001000,可以看到右移两位后的数变成了8,可以分析出其实右移就是一个除以2的操作

例:对于非2,4,8,16,64的数也可以试验一下:

System.out.println(3 >> 1);
System.out.println(5 >> 1);
System.out.println(63 >> 1);

其结果分别为1,2,31.

所以右移就是一个整除2的过程,右移一位就是除一次,n位就是除n次。

同时需要注意的>>是带符号的,也就是说它的高位补充数是由最高位来决定的,正数的最高位为0,负数的最高位为1,所以负数 >>后还是负数。

另例:

        System.out.println(5>>1);
System.out.println(63>>1);
System.out.println(63>>2);
System.out.println(63>>3);

结果:

2
31
15
7

可以看出>>1则除以2,>>2则除以2在除以2.后面以此类推

>>>无符号右移

原理和上面一样,不同的是它的高位总是由0来补充。

        System.out.println(3 >>> 1);
System.out.println(5 >>> 1);
System.out.println(64 >>> 1);
System.out.println(63 >>> 1);
System.out.println(-63 >>> 1);

结果分别是:

1
2
32
31
2147483616

由此可看出>>>符号在计算正数时与>>符号一样,而如果为负数时则移动位置变化

因为-64在计算机中的存在为:11111111111111111111111111000000,那么无符号右移一位就变成了01111111111111111111111111100000,这个值等于2147483616

所以对于这些位运算不要用惯性思维去思考,一定要想明白二进制是如何工作的。

<<左移

 System.out.println(-64 << 1);
System.out.println(64 << 1);
System.out.println(25 << 1);

结果是-128,128,50,显然是乘2的

左移后低位是由0来补充的

3<<3    表示3乘2的三次方

因为将一个数左移n位,就相当于乘以了2的n次方

JAVA中没有<<<的,因为左移后低位肯定是由0来补充的

java的<<左移,>>右移,>>>无符号右移的更多相关文章

  1. ABAP语言实现 左移 <<、无符号右移 >>> 位移操作

    这几天要在ABAP中实现 3DES 标准对称加密算法,与其他外部系统进行加密/解密操作.由于ABAP语言中没有 左移 <<.无符号右移 >>>  操作,只能自己实现 思路 ...

  2. 原码,反码,补码 与(&) 或(|) 非(~) 异或(^) 左移 << 右移 >> 无符号右移 >>>

    原码 数字在计算机中以二进制表示,8位的字长,最高位是符号位, 正数为0,负数为1.比如,3为0000 0011: -3为1000 0011. 注意,Java中int为32位.3的16进制表示为3,- ...

  3. java右移>> 无符号右移>>>

    >>>是无符号右移,在高位补零 >>是带符号的右移,如果是正数则在高位补零,负数则补1 int a = -1; System.out.println(a>>1 ...

  4. java移位运算符:<<(左移)、>>(带符号右移)和>>>(无符号右移)。

    1. 左移运算符 左移运算符<<使指定值的所有位都左移规定的次数. 1)它的通用格式如下所示: value << num num 指定要移位值value 移动的位数. 左移的规 ...

  5. Java负整数的左移、右移、无符号右移

    转自  Java负整数的左移.右移.无符号右移 Java负整数的左移.右移.无符号右移.正数的位移没有涉及到符号,而且正数的原码.反码.补码都是一样的,所以相对简单,但是对于负整数的位移,往往容易混淆 ...

  6. [JAVA]移位运算(左移<<,右移>>和无符号右移>>>)

    一.背景知识 整数在内存中是以二进制的形式存在的,而且存的是该整数的补码.最高位代表符号位,正数为0,负数为1 正数的补码是其二进制本身,负数的补码则是 符号位保持1不变,其他位按位取反再加1,+0和 ...

  7. java移位运算符实验程序:&lt;&lt;(左移)、&gt;&gt;(带符 号右移)和&gt;&gt;&gt;(无符号右移)

    public class txs { static void leftbit(){ int i;               //整型长度为32位                           ...

  8. 分析轮子(二)- << ,>>,>> (左移、右移、无符号右移)

    前言:写 分析轮子(一)-ArrayList.java 的时候看到源码中有 int newCapacity = oldCapacity + (oldCapacity >> 1); 这样的代 ...

  9. Java,C 位移运算符 有符号右移>>与无符号右移>>>

    个人博客 地址:https://www.wenhaofan.com/a/20181029232749 有符号右移 正数有符号右移 首先计算4>>2 将4转为二进制 0000 0100 右移 ...

随机推荐

  1. Spring+Mybatis+Mysql搭建分布式数据库访问框架

    一.前言 用Java开发企业应用软件, 经常会采用Spring+MyBatis+Mysql搭建数据库框架.如果数据量很大,一个MYSQL库存储数据访问效率很低,往往会采用分库存储管理的方式.本文讲述如 ...

  2. centos7安装eclipse方法

    很多喜欢编程的朋友并不是很喜欢使用Windows来编写程序,尽管可视化编程但是操作相对繁琐,因而只在电脑上装有Linux系统,那么我们来说一下Linux下安装Java EE编程工具eclipse的方法 ...

  3. Git分支(2/5) -- Fast Forward 合并

    快捷操作: 切换并创建分支: git checkout -b 分支名. git checkout -b some-change 然后我打开某个文件(index.html)修改一下标题. Commit之 ...

  4. 使用Mifare卡加密数据 笔记

    Mifare 是最常用的射频卡,具体介绍网上太多,我就不说了.,很多城市的最早的地铁公交卡都是用这种卡,后来被破解后都换成智能卡了. 但是由于技术成熟,使用方便,成本低,现在很多小区门禁卡,停车卡,食 ...

  5. 打印机驱动冲突和端口异常:win10更新部分补丁后,打印机本地连接(连接打印机的主机)可以打印,其他共享网络中的电脑可以连接到打印机,但不能打印——解决方案

    一.问题描述: 1.A(WIN10系统)表示连接打印机的电脑,P表示打印机(型号:惠普127M),B(WIN7系统)表示局域网中的电脑 2.A升级后部分补丁后,A可以使用打印机P打印文件,B显示可以连 ...

  6. Redis set集合结构及命令详解

    set 无序集合 集合的性质: 唯一性,无序性,确定性 注: 在string和link的命令中,可以通过range 来访问string中的某几个字符或某几个元素 但,因为集合的无序性,无法通过下标或范 ...

  7. ArcEngine 10.2 汉化问题

    开发环境:VS2010 + ArcEngine 10.2 + DEV 15.2 arcengine自带工具条提示汉化方法: 1:重写tool里的方法 2:利用工具箱里的ToopTip 3:把:ArcG ...

  8. Matlab绘图基础——绘制三维曲线

    %% 绘制三维曲线 %plot3函数,其中每一组x,y,z组成一组曲线的坐标参数,选项的定义和plot函数相同. %1.当x,y,z是同维向量时,则x,y,z 对应元素构成一条三维曲线. x0 = 0 ...

  9. python提示import XX 不存在,如何排查错误

    1.如何确定文件夹是一个包, 检查包中是否有__init__.py 文件, 在python模块的每一个包中,都有一个__init__.py文件(这个文件定义了包的属性和方法)然后是一些模块文件和子目录 ...

  10. 攻防组网之—-MikroTik软路由的配置和FUZZ

    作者:红发香克斯 开篇之前一直想借助一台高性能PC利用VMWare组建一个攻防网络,之前有一贴写过找到了一个软路由系统,就是可以在VMWare中使用的路由器操作系统,那个系统还挺常用,上次帖子写到了安 ...