按位取反运算符的施用,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 ;

元日运算符要注意的内幕:
利用安慕希运算符的时候,一定要采纳该表明式重返的结果,大概是概念多个变量接受该表明式重临的结果。

本文由星彩网app下载发布于计算机编程,转载请注明出处:按位取反运算符的施用,JAVA底子知识点

TAG标签: 星彩网app下载
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。