以下为个人理解,有不对的地方请提出

Java中,>>、>>>都是在数字的二进制的补码中进行的

正数的补码为本身 如
33的二进制表示为 00000000 00000000 00000000 00100001 补码为 00000000 00000000 00000000 00100001

负数的补码为符号位即最高位1不变(负数符号位为1,正数为0),其余各位取反,再加1 如
-33的二进制表示为 10000000 00000000 00000000 00100001 补码为 11111111 11111111 1111111 11011111

进行右移>>操作
33>>5 即 补码 00000000 00000000 00000000 00100001 右移5位 00000000 00000000 00000000 00000001 
因为33为正数,再取补码为 00000000 00000000 00000000 00000001 转为十进制为1 即33>>5=1

-33>>5 即 补码 11111111 11111111 1111111 11011111 右移5位 00000111 11111111 11111111 11111110
因为-33为负数,再取补码为 00000100 0000000 0000000 00000010 最前一位1为符号位 转为十进制为-2 即-33>>5=-2

进行无符号右移>>>操作
33>>>5 即 补码 00000000 00000000 00000000 00100001 右移5位 00000000 00000000 00000000 00000001 
因为无符号位,代表结果肯定为正数,正数取补码为本身 00000000 00000000 00000000 00000001 转为十进制为1 即33>>>5=1

-33>>>5 即 补码 11111111 11111111 1111111 11011111 右移5位 00000111 11111111 11111111 11111110
因为无符号位,代表结果肯定为正数,正数取补码为本身 00000111 11111111 11111111 11111110 转为十进制为134217726 即-33>>>5=134217726

  1. public class Operator
  2. {
  3. public static void main(String[] args)
  4. {
  5. System.out.println(33>>5);
  6. System.out.println(-33>>5);
  7. System.out.println(33>>>5);
  8. System.out.println(-33>>>5);
  9. }
  10. }

以上为个人理解,如有不对的地方,请各位指正。

Java中正数与负数操作>>、>>>的区别的更多相关文章

  1. JAVA中String = null 与 String = "" 的区别

    JAVA中String = null 与 String = ""的区别 笔者今天在Debug的时候发现的NPE(NullPointerException),辛辛苦苦地调试了半天,终 ...

  2. JAVA中的集合容器操作类

    目录 JAVA中的集合容器操作类 List集合 ArrayList的操作方法说明 LinkedList Stack Set Map Queue 总结 JAVA中的集合容器操作类 Java容器类库总共分 ...

  3. Java中wait和sleep方法的区别

    1.两者的区别 这两个方法来自不同的类分别是Thread和Object 最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法(锁代码块和方法锁). wait ...

  4. 转 Java中wait和sleep方法的区别

    1.两者的区别 这两个方法来自不同的类分别是Thread和Object 最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法(锁代码块和方法锁). wait ...

  5. java中ArrayList 和 LinkedList 有什么区别

    转: java中ArrayList 和 LinkedList 有什么区别 ArrayList和LinkedList都实现了List接口,有以下的不同点:1.ArrayList是基于索引的数据接口,它的 ...

  6. Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例(转)

    Java中==.equals.hashcode的区别与重写equals以及hashcode方法实例  原文地址:http://www.cnblogs.com/luankun0214/p/4421770 ...

  7. java中的sleep()和wait()的区别

    对于sleep()方法,我们首先要知道该方法是属于Thread类中的.而wait()方法,则是属于Object类中的. sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监 ...

  8. java中的this与super的区别

    java中的this与super的区别 1. 子类的构造函数如果要引用super的话,必须把super放在函数的首位 代码如下: class Base { Base() { System.out.pr ...

  9. JAVA中extends 与implements有啥区别?

    JAVA中extends 与implements有啥区别?1. 在类的声明中,通过关键字extends来创建一个类的子类.一个类通过关键字implements声明自己使用一个或者多个接口.extend ...

随机推荐

  1. centos svnversion安装部署

    第一步: yum install subversion; 第二步: mkdir /data/svn/conf mkdir /data/svn/library 第三步: svnadmin create  ...

  2. 让SignalR客户端回调支持强类型

    几天写一个小程序的时候用到了SignalR,发现现在SingalR Server 支持强类型了,也就是说,我们可以定义一个客户端的通知契约: public interface IClient    { ...

  3. MySQL优化之如何了解SQL的执行频率

    http://www.jb51.net/article/50180.htm show [session|global] status 可以根据需要加上参数“ session ”或者“ global ” ...

  4. 项目中简单使用ztree,简单数据。

    由于公司架构较旧,使用的jdk版本为1.4,页面上也没有el表达式. 加入 js 文件 <% String context = request.getContextPath(); %> & ...

  5. MYSQL LIMIT 用法详解

    在mysql的limit用法中,网上有这样的论述: "//为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1: mysql>SELECT * FROM tab ...

  6. Dos网络查看命令

    net use //ip/ipc$ " " /user:" " 建立IPC空链接 net use //ip/ipc$ "密码" /user: ...

  7. 捕获和记录SQL Server中发生的死锁

    经带在论坛上看到有人在问怎么捕获和记录死锁信息,在这里,我将自己的一些心得贡献出来,与大家分享,也请各位指正. 我们知道,可以使用SQL Server自带的Profiler工具来跟踪死锁信息.但这种方 ...

  8. 解决AJAX跨域:1、利用JSONP;2、JS设置Header

    一.利用JSONP: 首先来看看在页面中如何使用jQuery的ajax解决跨域问题的简单版: $(document).ready(function(){ var url='http://localho ...

  9. python 将编码转为汉字

    print '\u57fa\u7840\u5316\u5de5\u4e1a'.decode('unicode-escape') print urllib.unquote("%C0%FA%CA ...

  10. Tomcat 没有自动解压webapp下的war项目文件问题

    默认选择的tomcat安装在了C盘下的C:\Program Files下 所以webapp文件也在C盘下 选择启动tomcat时 我选择了 bin下的 Tomcat.exe 显示成功启动 打开项目网站 ...