zoukankan      html  css  js  c++  java
  • Java中移位操作运算符的理解

    java中的移位运算符有三种:

    1、 <<: 左移

    2、 >>: 右移

    3、 >>>: 无符号右移

    使用方法:左移就是将左边的操作数在内存中的二进制数据左移指定的位数,左边移空的部分补零,右移:如果最高位是0,空位就填0,如果最高位是1,空位就填1。无符号右移无论最高位是什么,空位都补零。

    数据在内存中以补码的形式存储

    左移和右移的数学意义:

    对于左移,对于整型a,  a<<n=a*2^n(前提是结果在整型的范围之内),对于右移 正的整型a,  a>>n=a/2^n,对于负的整型a,a>>n=-(|a|/2^n+1);

    为什么对于右移,正数和负数的结果不一样呢?

    我们可以看一个例子:

    package sort;
    
    public class sort1 {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
        int a=-123;
        System.out.println("原二进制位:"+Integer.toBinaryString(a));
        int b=a>>2;
        System.out.println("右移两位结果为:"+b);
        System.out.println("右移后二进制位:"+Integer.toBinaryString(b));
        int c=123;
        System.out.println("原二进制位:"+Integer.toBinaryString(c));
        int d=c>>2;
        System.out.println("右移后的结果为:"+d);
        System.out.println("右移后二进制位:"+Integer.toBinaryString(d));
        }
    }

    运行结果为:

    对于123,其二进制数为0  1111011,右移两位相当于把0  111000右移两位,而0  111000的十进制为120,所以结果为120/4=30;

    对于-123,其二进制数为1  0000101,右移两位相当于把1  0000100右移两位,而1  0000100的十进制为-124,所以结果为-124/4=-31。

  • 相关阅读:
    MySql 学习之 一条更新sql的执行过程
    MySql 学习之 一条查询sql的执行过程
    VUE基本介绍
    ESMAScript6基本介绍
    npm
    tensorflow2.0 评估函数
    网页引入mathjax,latex
    Veno File Manager
    tensorflow 测量工具,与自定义训练
    tensorflow自定义网络结构
  • 原文地址:https://www.cnblogs.com/qingergege/p/5687306.html
Copyright © 2011-2022 走看看