按位取反运算符的使用,JAVA基础知识点
分类:计算机编程

按位取反运算符是按照二进制的每一位取反,比如byte类型,~0的结果就是255。

  • 运算符
    • 赋值运算符
    • 算术运算符
    • 比较运算符

该功能可以在mask中做一些反转操作

运算符

 

赋值运算符 “=”

最常见的操作符之一是简单赋值操作符“ =”,它将右边的值赋给左边的操作数:

int a =10

如下代码,a存放了2,4,8三个值。用按位取反'~'运算符反转

算术运算符

打印结果是 false,flase,false,true,true。Mask已经被反转

简单的算术运算福(二元)

Java编程语言提供了执行加,减,乘,除的运算符。唯一可能看起来很新的符号是“ %”,它将一个操作数除以另一个操作数,并将余数作为结果返回。

Operator Description
Additive operator (also used for String concatenation)
- Subtraction operator
* Multiplication operator
/ Division operator
% Remainder operator
class ArithmeticDemo {

    public static void main (String[] args) {

        int result = 1   2;
        // result is now 3
        System.out.println("1   2 = "   result);
        int original_result = result;

        result = result - 1;
        // result is now 2
        System.out.println(original_result   " - 1 = "   result);
        original_result = result;

        result = result * 2;
        // result is now 4
        System.out.println(original_result   " * 2 = "   result);
        original_result = result;

        result = result / 2;
        // result is now 2
        System.out.println(original_result   " / 2 = "   result);
        original_result = result;

        result = result   8;
        // result is now 10
        System.out.println(original_result   "   8 = "   result);
        original_result = result;

        result = result % 7;
        // result is now 3
        System.out.println(original_result   " % 7 = "   result);

        // 在java中做取模 运算的时,结果的正负号是取决于被除数。
        System.out.println("结果:" (10%3));  // 1
        System.out.println("结果:" (10%-3)); // 1     
        System.out.println("结果:" (-10%3)); // -1   
        System.out.println("结果:" (-10%-3)); //  -1 
    }
}
class Program
{
    static void Main(string[] args)
    {
        byte a = 2 | 4 | 8;
        byte b = (byte)~a;

        Console.WriteLine((b & 2) == 2);
        Console.WriteLine((b & 4) == 4);
        Console.WriteLine((b & 8) == 8);

        Console.WriteLine((b & 16) == 16);
        Console.WriteLine((b & 32) == 32);

        Console.Read();
    }
}

一元运算符

一元运算符只需要一个操作数; 它们执行各种操作,例如将值递增/递减1,否定表达式或反转布尔值。

Operator Description
Unary plus operator; indicates positive value (numbers are positive without this, however)
- Unary minus operator; negates an expression
Increment operator; increments a value by 1
-- Decrement operator; decrements a value by 1
! Logical complement operator; inverts the value of a boolean
class UnaryDemo {

    public static void main(String[] args) {

        int result =  1;
        // result is now 1
        System.out.println(result);

        result--;
        // result is now 0
        System.out.println(result);

        result  ;
        // result is now 1
        System.out.println(result);

        result = -result;
        // result is now -1
        System.out.println(result);

        boolean success = false;
        // false
        System.out.println(success);
        // true
        System.out.println(!success);
    }
}

自增自减运算符:如果只是执行简单的递增/递减操作,则选择哪个版本并不重要。但是如果在更大的表达式中使用这个运算符,那么你选择的运算符可能会有很大的不同。

    public static void main(String[] args) {
        int i = 0;
        int i2;
        i2 = i  ; // int temp = i; i2 = i;  i=temp 1;
        System.out.println(i2);  // i2 = 0;i = 1
        i2 =   i;  // int temp = i; i=temp 1; i2 = i;
        System.out.println(i2);  // i2 = 2; i = 2
    }

class PrePostDemo {
    public static void main(String[] args){
        int i = 3;
        i  ;
        // prints 4
        System.out.println(i);
          i;               
        // prints 5
        System.out.println(i);
        // prints 5
        System.out.println(i  );  //后自增,先使用数据,再进行自增;System.out.println(i  )相当于System.out.println(i);i 1;
        // prints 7
        System.out.println(  i);//前自增,先进行自增,再使用数据;System.out.println(  i)相当于i 1;System.out.println(i);
        // prints 7
        System.out.println(i);
    }
}

 

比较运算符

Operator Description
== equal to
!= not equal to
> greater than
>= greater than or equal to
< less than
<= less than or equal to
class ComparisonDemo {

    public static void main(String[] args){
        int value1 = 1;
        int value2 = 2;
        if(value1 == value2)
            System.out.println("value1 == value2");
        if(value1 != value2)
            System.out.println("value1 != value2");
        if(value1 > value2)
            System.out.println("value1 > value2");
        if(value1 < value2)
            System.out.println("value1 < value2");
        if(value1 <= value2)
            System.out.println("value1 <= value2");
    }
}

比如在unity引擎中,该操作可以被使用在LayerMask上:

逻辑运算符

逻辑运算符 :逻辑运算符的作用是用于连接布尔表达式的。

Operator Description
&
|
^ 异或
&& 双与;短路与
|| 双或;短路或
  • & 与

    • 规律: 只有左右变量同时 为true,那么结果才是true,否则就为false。
  • | 或

    • 规律: 只要两边的布尔表达式有一边为true,那么结果就为true,只有两边同时为false 的时候,结果才是false.
  • ^ 异或

    • 规律: 只要两边的布尔表达式 结果不一致,那么结果就为true,如果左右两边 的布尔表达式一致,那么就为false.
  • && 短路与;双与

    • 短路与和单与符号的相同与不同点:
      • 相同点: 短路与和单与运算 的结果是一样的。
      • 不同点: 使用短路与的时候,如果左边的布尔表达式为false,则不会在运算右边的布尔表达式,从而提高了
        效率。使用单与的时候,即使发现左边的布尔表达式为false,还是会运算右边的布尔表达式的。
    • 只有左边的布尔表达式为false时,双与的效率才要高于单与的.
  • || 短路或;双或
    • 短路或与单或的相同点与不同点:
      • 相同点:运算的结果是一致 的。
      • 不同点:使用短路或的时候,当发现左边的布尔表达式为true时,则不会运算右边的布尔表达式。
    • 使用单或的时候 发现左边的布尔表达式为true,还是会运算右边布尔表达式。
public class LayerMaskTest : MonoBehaviour
{
    public LayerMask layerMask;


    void OnEnable()
    {
        layerMask.value = ~layerMask.value;
    }
}

位运算符:位运算符就是直接操作二进制位的。

  • & (与)
  • | (或)
  • ^ (异或)
  • 规律: 如果操作数A连续异或同一个操作数两次,那么结果还是操作数A。
public static void main(String[] args) {
    System.out.println(6&3); // 2 
    System.out.println(6|3); // 7
    System.out.println(6^3); //  5
    System.out.println(6^3^3); // 6
    System.out.println(~7);  // -8
}

应用: 对数据加密.
~ (取反)
当参与取反的数值是正数时,把对应的值加上负号,再-1;
当参与取反的数值是负数时,把对应的值加上负号,再-1;
负数的表现形式就是对应的正数取反,再加1。负数的最高位肯定是1。
负数对应的正数的二进制-1,然后取反。

位运算符可能会出现的笔试题目:

  1. 交换两个变量的值,不准出现第三方变量。
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        a = a ^ b;
//        System.out.println(a); 30
        b = a ^ b;
        a = a ^ b;
        System.out.println(a);
        System.out.println(b);
    }
  1. 取出一个二进制数据的指定位数。要求读取该二进制数据的低4位
        00000000-00000000-00010100-01001101
    &   00000000-00000000-00000000-00001111
        ------------------------------------------
        00000000-00000000-00000000-00001101 

 

移位运算符:

  • << (左移)
    规律:一个操作数进行左移运算的时候,结果就是等于操作数乘以2的n次方,n就是左移 的位数.

    3<<1 = 3 *2(1) = 6;
    3<<2 = 3*2(2) = 12
    3<<3 = 3*2(3) = 24
    
  • >>(右移)
    规律:一个操作数在做右移运算的时候,实际上就是等于该操作数除以2的n次方,n就是右移的位数。

    3>>1 = 3 / 2(1) = 1
    3>>2 = 3 / 2(2) = 0 
    
  • >>>(无符号右移) :

    • 无符号右移与右移的区别:进行右移运算的时候,如果操作数是一个正数,那么左边的空缺位使用0补,
    • 如果操作数是一个负数,那么左边的空缺位使用1补。而使用无符号右移的时候,不管是正数还是负数都统一使用0补。

笔试题目:使用最高的效率算出2乘以8的结果。

  2<<3 = 2*2(3) = 16;

图片 1

三元运算符(三目运算符)

格式: 布尔表达式?值1:值2 ;

三元运算符要注意的细节:
使用三元运算符的时候,一定要使用该表达式返回的结果,或者是定义一个变量接收该表达式返回的结果。

本文由pc28.am发布于计算机编程,转载请注明出处:按位取反运算符的使用,JAVA基础知识点

上一篇:Django中的CBV和FBV示例介绍 下一篇:没有了
猜你喜欢
热门排行
精彩图文