• 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. }  

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

  • 相关阅读:
    Systemd 进程管理教程
    traefik的80和443端口占用进一步分析
    使用KubeOperator安装k8s集群后,节点主机yaml文件路径
    kubernetes1.20 部署 traefik2.3
    数据采集实战(二)-- 京粉商品
    机器人导航(仿真)(三)——路径规划(更新中)
    机器人导航(仿真)(二)——amcl定位
    Tkinter 做简单的窗口视窗 Python GUI
    机器人导航(仿真)(一)——SLAM建图
    (转载)VMware Workstation Ubuntu 20.04 无法连接网络问题
  • 原文地址:https://www.cnblogs.com/daojian/p/4910568.html
Copyright © 2020-2023  润新知