zoukankan      html  css  js  c++  java
  • Java语法学习4

    亦或^运算除了交换之外leetcode上还有一道有趣的算法题,其中有一位大牛发布了让别人惊讶的源码,短短几行,巧妙运用位运算亦或的特性。

    // 存在奇数次的数是哪个
    class Bit {
        public static void main(String[] args) {
            //^异或
            //leetcode.com
            int[] n = {9,4,9,5,4,5,7};
    
            int r = 0;
            for(int e : n) {
                r ^= e;
            }
            System.out.println(r);
        }
    }
    

    输出7,当然还有很多之类的变形,例如找出出现3次的,4次的。

    位运算是效率很高的运算,都是数值转换为二进制运算

    ~按位取反

        byte b = 127;

       System.out.print(~b);

    打印出-128;

    按位取反,再加上1得原数负值。

    0011 

    ------

    1100

    还要加1

    1101

    因为第一位是符号,1表示是负数

    则-5


    位移符号

    int a = 3;

    a<<2 a*2^2;

    64 >> 3 64/2^3;

    如果位不够 3 >>7

    0000 0011 , 从又开始删去7位剩下0,从右补齐0,补齐7个零。

    如果是负数移多了位,则为-1,(向左移)


    下面特此为取反运算符计算方法归纳:(计算机组成原理和计算机导论)

    “~”运算符在c、c++、java、c#中都有,之前一直没有遇到这个运算符,今天碰到一道笔试题,经过学习,终于搞懂了。

    要弄懂这个运算符的计算方法,首先必须明白二进制数在内存中的存放形式,二进制数在内存中是以补码的形式存放的

      另外正数和负数的补码不一样,正数的补码,反码都是其本身,既:

     正数9(1001)在内存中存储为01001,必须补上符号位

    补码为01001

    反码为01001,其中前面加的0是符号位,负数的是1

    负数 -1(10001,开头的1为符号位)在内存中存放为,11111

    其中11111为其补码

    反码为11110

    负数的补码是:符号位不变,其余各位求反,末位加1 ,既11111

    反码是:符号位为1,其余各位求反,但末位不加1 ,既11110

    也就是说,反码末位加上1就是补码 

    ------------------------------------------------------------------------------------------------------------------------------------

    弄懂了上述情况后,如何计算就好办了

    假设有一个数~9,计算步骤如下,9=1001

    其补码为01001,

    对其取反10110,这个数是在内存中存放的,现在需要装换成原码,既先减1,然后取反得

                    11010,符号位为1是负数,既-10

    另外在Java存储中,溢出都是走圆圈下一位,-126,-127,-128,127,126,125,....3,2,1,0,-1,-2,-3,-125,-126



  • 相关阅读:
    【转+补充】在OpenCV for Android 2.4.5中使用SURF(nonfree module)
    Delphi StarOffice Framework Beta 1.0 发布
    Angular ngIf相关问题
    angularjs文档下载
    公众号微信支付开发
    公众号第三方平台开发 教程六 代公众号使用JS SDK说明
    公众号第三方平台开发 教程五 代公众号处理消息和事件
    公众号第三方平台开发 教程四 代公众号发起网页授权说明
    公众号第三方平台开发 教程三 微信公众号授权第三方平台
    公众号第三方平台开发 教程二 component_verify_ticket和accessToken的获取
  • 原文地址:https://www.cnblogs.com/zhangmingzhao/p/7256707.html
Copyright © 2011-2022 走看看