zoukankan      html  css  js  c++  java
  • Java中正数与负数操作>>、>>>的区别

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

    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

    [java] view plaincopy
     
    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开源内容管理CMS系统J4CMS支持静态化直接ftp上传到你的空间了
    JAVA数组的定义及用法
    从本地上传整个目录到hdfs的java程序
    图片轮显效果大全
    Windows 自己主动关机命令 shuntdown
    Android源码是这样搞到的(图解)
    JSONObject与JSONArray的使用
    教你用笔记本破解无线路由器password
    tomcat配置文件server.xml具体解释
    SQLite的SQL语法
  • 原文地址:https://www.cnblogs.com/daojian/p/4910568.html
Copyright © 2011-2022 走看看