精华内容
下载资源
问答
  • 同时在看java技术栈相关源码时也会发现有大量的二进制运算,所以写这篇博客的目的就是整理出java技术中常用的二进制运算,一方面方便自己查阅和积累,另一方面也想分享给那些刚好看到这篇博文的同学,希望能帮助到你...

    前言:

    在看HashMap 源码时发现,HashMap 的 put 方法中用到了位运算,与运算,异或运算等二进制运算。对于这种平时不常用的知识点,很容易遗忘。同时在看java技术栈相关源码时也会发现有大量的二进制运算,所以写这篇博客的目的就是整理出java技术中常用的二进制运算,一方面方便自己查阅和积累,另一方面也想分享给那些刚好看到这篇博文的同学,希望能帮助到你。

    注意:java中所有的二进制操作符都是操作数字的补码(既:十进制转换为二进制) 

    & (与运算符)

    1.特点:二元操作符,操作两个二进制数据;两个二进制数最低位对齐,只有当两个对位数都是1时才为1,否则为0
    2.案例:
        int a = 3 & 2 ; 
        System.out.println(a); //结果为 2 
    3.分析:
        3的二进制补码表示为:
            00000000 00000000 00000000 00000011
        2的二进制补码表示为:
            00000000 00000000 00000000 00000010
        运算:3 & 2 
            00000000 00000000 00000000 00000011
        &   00000000 00000000 00000000 00000010
        -------------------------------------------
            00000000 00000000 00000000 00000010            二进制是2
    

    | (或运算符)

    1.特点:二元操作符,操作两个二进制数据;两个二进制数最低位对齐,当两个对位数只要有一个是1则为1,否则为0
    2.案例:
        int a = 3 | 2 ; 
        System.out.println(a); //结果为 3 
    3.分析:
        3的二进制补码表示为:
            00000000 00000000 00000000 00000011
        2的二进制补码表示为:
            00000000 00000000 00000000 00000010
        运算:3 | 2 
            00000000 00000000 00000000 00000011
        |   00000000 00000000 00000000 00000010
        -------------------------------------------
            00000000 00000000 00000000 00000011            该补码对应十进制为3  
    

    ^ (异或运算符)

    1.特点:二元操作符,操作两个二进制数据;两个二进制数最低位对齐,只有当两个对位数字不同时为1,相同为0
    2.案例:
        int a = 3 ^ 2 ; 
        System.out.println(a); //结果为 1 
    3.分析:
        3的二进制补码表示为:
            00000000 00000000 00000000 00000011
        2的二进制补码表示为:
            00000000 00000000 00000000 00000010
        运算:3 ^ 2 
            00000000 00000000 00000000 00000011
        ^   00000000 00000000 00000000 00000010
        -------------------------------------------
            00000000 00000000 00000000 00000001           该补码对应十进制为1 
    

    ~ (非运算符)

    1.特点:一元操作符,
    2.规则:非运算即取反运算,在二进制中1变0,0变1
    3.案例:
        int a = ~ 2 ; 
        System.out.println(a); //结果为 -3
    4.分析:
         2的二进制补码表示为:
            00000000 00000000 00000000 00000010
         运算:
          ~     00000000 00000000 00000000 00000010
        ------------------------------------------
             11111111 11111111 11111111 11111101   //该补码对应十进制为:-3
    

    <<(左移运算符)

    1.形式: m << n 
    2.特点:二元操作符,m数字二进制向左移动n位的结果;结果相当于: m*(2的n次方)
    3.案例:
        int a = 3 << 2 ; 
        System.out.println(a); //结果为 12 
    4.分析:
        3的二进制补码表示为:
            00000000 00000000 00000000 00000011
    
        运算:3 << 2 
                00000000 00000000 00000000 00000011
        << 2    
        -------------------------------------------
                00000000 00000000 00000000 00001100            该补码对应十进制为12 
    

    >> (右移运算符)

    1.形式: m >> n 
    2.特点:二元操作符,m数字二进制向右移动n位的结果;结果相当于: m / (2的n次方);
    正数左补0,负数左补1.
    3.案例:
        int a = 3 >> 2 ; 
        System.out.println(a); //结果为 0 
    4.分析:
        3的二进制补码表示为:
            00000000 00000000 00000000 00000011
    
        运算:3 >> 2 
                00000000 00000000 00000000 00000011
        >> 2    
        -------------------------------------------
                00000000 00000000 00000000 00000000           该补码对应十进制为0
    5.注意: 最后的11向右移动两位,正好补上左边补上0; 所以结果为0 
    

    >>> (无符号右移运算符)

    1.二元操作符
    2.特点:它使用0扩展,无论正负都在最高位补0 
    3.案例:
        int a = 3 >>> 2 ; 
        System.out.println(a); //结果为 0 
    4.分析:
        3的二进制补码表示为:
            00000000 00000000 00000000 00000011
        运算:
            00000000 00000000 00000000 00000011
        >>>2
        ------------------------------------------
            00000000 00000000 00000000 00000000        该补码对应十进制为0
    

    <<< (无符号左移运算符)

    不好意思二进制没有无符号左移运算。

    注意:

    位运算中左移跟符号没有关系的, 因为最高位就是符号位
    例如8位的byte中最高位如果是 1那就表示负数 如果是左移一位, 
    那么最高位就会丢掉, 最低位补0 1111 1111 << 1 就会变成 1111 1110

    结语:

    以上就是关于java中常用的二进制运算,值得一提的是。形如:HashMap 中为何将数组的 

    DEFAULT_INITIAL_CAPACITY 默认值设为 1 << 4 而不是直接赋值为 16呢,不就是因为左移运算比赋值运算更快嘛。

    展开全文
  • 二进制运算

    2018-01-27 13:18:39
    二进制减法运算规则:二进制的减法运算法则是: 0-0=1-1=0 1-0=1 0-1=1(向高位借位) ,借位的时候一定要注意,如果前面为0,就一直往前借,直到1,借位的1变成0。 11101100转成10进制 先减1得到11101011 然后取反...

    二进制负数如何转十进制负数

    减1取反

    二进制减法运算规则:二进制的减法运算法则是: 0-0=1-1=0 1-0=1 0-1=1(向高位借位) ,借位的时候一定要注意,如果前面为0,就一直往前借,直到1,借位的1变成0。

    11101100转成10进制

    先减1得到11101011 然后取反变成 00010100 这里是20 看原二进制的符号位1,故-20

    十进制进制负数如何转二进制

    首先负数在计算机中都是以补码的形式存放的。

    先不要管十进制的符号。

    比如 -20 先写出20的原码 00010100

    将原码取反得到反码 11101011

    反码加1 得到补码 -20 表示就是11101100。

    >>

    是右移运算符

    是带符号移位 正数右移高位补0,负数右移高位补1。

    System.out.println(-20 >> 2);//-5
    System.out.println(20 >> 2);//5

    <<

    左移运算符,不管正数还是负数,都是添加0。

        System.out.println(-20 << 2);//-80
        System.out.println(20 <<2);//80

    这里写图片描述

    >>>

    这个是无符号的右移,和>>很像,但是需要注意的是,不管正数和负数都是添加0。

    展开全文
  • 大数运算包含加,减,乘,除,取模,幂运算,模幂运算。支持十进制运算,二进制运算;支持文件运算,键盘输入运算,若有需要,可提供实验报告

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,926
精华内容 11,170
关键字:

二进制运算