Java位运算

作者: 君子若莲 | 来源:发表于2018-02-23 14:23 被阅读101次

春节过完了,就从一篇博客开始新一年的码农生涯吧,最近在刷LintCode的题目,在做一道通过位运算实现加减法的题目时,顺便温习了Java位运算的内容,通过本文记录一下。计算机只有0和1,一切都只能用二进制表示,先来弄明白Java是如何表示十进制的数字的,Java用原码表示正数,用补码表示负数,也叫Two's Complement,补码为原码按位取反后+1,比如 15的二进制表示为0001111,-15的二进制表示为11110001,如果最高位为0,则表示正数,最高位为1则表示负数,Java支持的位运算操作符包括

The unary bitwise complement operator "~"    

The signed left shift operator "<<" shifts a bit pattern to the left

 the signed right shift operator ">>" shifts a bit pattern to the right

The unsigned right shift operator ">>>" shifts a zero into the leftmost position

The bitwise & operator performs a bitwise AND operation.

The bitwise ^ operator performs a bitwise exclusive OR operation.

The bitwise | operator performs a bitwise inclusive OR operation.

分别解释一下 

~ 按位取反

<< 左移

>> 带符号补位右移

>>> 不带符号补位右移

&与

|或

^异或,不同为1,相同为0

位运算加减法a+b a&b后<<1 可以算出进位carry,通过a ^ b 可以算出不带进位后相加的值,再将carry相加,直到carry为0。

递归实现。

public int addThroughBitOperationRecusioin(int a ,int b){

        int carry = a & b;

        int result = a ^ b;

        while(carry != 0){

            carry = carry << 1;

            result = addThroughBitOperationRecusioin(carry,result);

            carry = 0;

        }

        return result;

    }

非递归实现

public void addThroughBitOperation(int a ,int b){

        int carry = a & b;

        System.out.println("carry " + Integer.toBinaryString(carry));

        int result = a ^ b;

        System.out.println("result " + Integer.toBinaryString(result));

        while(carry != 0){

            carry = carry << 1;

            System.out.println("carry " +Integer.toBinaryString(carry));

            int carryTemp = carry & result;

            System.out.println("carry " + Integer.toBinaryString(carry));

            result = carry ^ result;

            System.out.println("result " + Integer.toBinaryString(result));

            carry = carryTemp;

        }

        System.out.println(result);

      }

参考资料

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html

https://www.cs.cornell.edu/~tomf/notes/cps104/twoscomp.html

相关文章

  • java位运算

    Java 位运算(移位、位与、或、异或、非) Java提供的位运算符有:左移( << )、右移( >> ) 、无符...

  • python基础(四)----运算符

    一.算术运算符(基本同Java) 二.比较运算符(基本同Java) 三.赋值运算符(基本同Java) 四.位运算符...

  • JAVA位运算等运算符总结

    JAVA位运算等运算符总结 一、概述 运算符是一种“功能”符号,用以通知 Java 进行相关的运算。 Java 语...

  • java 位运算

    一、非 "~" 如果位数未0,则结果为1; 如果位数为1,则结果为0。 二、或"|" 两个只要有一个为1,结果为1...

  • Java 位运算

    首先,在Java中,运算符有以下这些: 按位与 & 按位或 | 按位异或 ^ 按位非 ~ 左移 << 右移 >> ...

  • Java位运算

    java各类转化字节数组 <----->二进制数字、十进制、16进制、字符串 二进制(Binary)<------...

  • java位运算

    java提供的位运算符 一元操作符:位非:~。 二元操作符:左移:<<; 右移: >>; 无符号右移: >>>(左...

  • Java 位运算

    本文主要介绍 Java 提供的位运算符:左移( << )、右移( >> ) 、无符号右移( >>> ) 、位与( ...

  • Java位运算

    Java常用的位运算: 带符号右移 >> 对于正数, 带符号右移 >> 会把所有的位右移,并在最前面补0对于负数,...

  • Java位运算

    判断int型变量a是奇数还是偶数 a&1 = 0 偶数 a&1 = 1 奇数 求平均值,比如有两个int类型变量x...

网友评论

    本文标题:Java位运算

    本文链接:https://www.haomeiwen.com/subject/euqeoxtx.html