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

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

  • 相关阅读:
    socket通信原理
    socket通信基础内容
    内核中断过程
    爬虫基础模块
    关于多个运算符的问题
    前戏
    js扩展
    加密
    django之form
    Django
  • 原文地址:https://www.cnblogs.com/daojian/p/4910568.html
Copyright © 2011-2022 走看看