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

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. 【位运算】【BFS】移动玩具

    1054: [HAOI2008]移动玩具 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2246  Solved: 1246[Submit][Stat ...

  2. [LOJ500]ZQC的拼图

    题目大意: 给你一个m*m的格子,让你往里面放给定的直角三角形,直角顶点必须放在右上角且不能翻转,但是可以把所有给定的三角形放大一个整数倍k,问至少放大几倍能使格子的左下角和右上角连起来?(可以超出边 ...

  3. svn出现Authorization failed

    进入svn的conf目录下 修改svnserve.conf [general] anon-access = read auth-access = write password-db = passwd ...

  4. Java中的文件操作(一)RandomAccessFile

    今天,学到的是java中的文件操作. Java.IO.File Java中操作文件用到RandomAccessFile类,既可以读取文件内容,也可以向文件输出数据,但不同与普通输入/输出流的是Rand ...

  5. bootstrap学习(全局CSS样式)(一)

    布局容器 bootstrap需要为页面内容和栅格系统包裹一个.container容器.我们提供了两个作词用处的类.注意,由于padding等属性的原因,这两种容器类不能互相嵌套. .container ...

  6. 关于applicationContext.xml cannot be opened because it does not exist的解决

    初学Spring在用Resource rs=new ClassPathResource("applicationContext.xml");时老是遇到这个错误.后来发现用 Appl ...

  7. enum don't allocate any memory

    int main() { _asm{ mov edi,edi mov edi,edi } ,Green,Yellow}; _asm{ mov edi,edi mov edi,edi } Color c ...

  8. UINavigationController 详解

    // 导航控制器 // 1. 比较常用的视图控制器管理类 // 2. 以栈的形式管理视图控制器, 先进后出 // 3. 创建navigation后, 视图控制器上会多出一个导航栏 // 4. 导航栏高 ...

  9. MFC进度条刷新处理

    m_p.SetRange(0,1000); m_p.SetStep(1); for (int i=0;i<1001;i++) { m_p.SetPos(i); Sleep(10); MSG ms ...

  10. Delphi XE8 TStyleBook的使用

    Delphi XE8来了,FMX的性能有了巨大的提升,比如:XE7下ListBox上下滑动的卡顿已经不复存在,直接用xe8编译后,再上下划动ListBox,已经变的非常流畅.另外,也见到有网友说,通过 ...