当前位置 博文首页 > 是琳琳呀!的博客:各式各样的运算符(Java)

    是琳琳呀!的博客:各式各样的运算符(Java)

    作者:[db:作者] 时间:2021-08-27 18:40

    运算符
    1:算术运算符:
    (1)基本四则运算符:+ -* / %
    其中特别注意/ %:
    A)int/int的结果还是int,如果要算小数位则使用double来计算。
    B)0不能作为除数。使用时会出现算术异常.
    C)%表示取余,不仅可以对int求模,也能对double来求模。
    eg:System.out.println(11.5%2.0);//1.5
    (2)增量赋值运算符+= -= *= /= %=
    a+=1;//a=a+1;
    (3)自增自减运算符++ --;
    a++表示先给a赋值再加1;
    ++a表示先给a加一再给a赋值;
    –同理;
    例:
    int a=10;
    int b=a++;
    int c=++a;
    System.out.println(a);//12
    System.out.println(b);//10
    System.out.println?;//12
    注:1.如果不取自增运算的表达式的返回值,则前置自增和后置自增没有区别。
    2.如果取表达式的返回值,则前置自增的返回值是自增过的值,后置自增的返回值是自增之前的值。
    2:关系运算符
    关系运算符主要有六种:== != < > <= >=
    特别注意:关系运算符的返回值类型都是boolean类型。
    3:逻辑运算符
    逻辑运算符主要有三种:&& || !
    注意:逻辑运算符的操作数(操作数往往是关系运算符的结果)和返回值都是boolean,
    (1)逻辑与&&
    规则:两个表达式都是true,结果为true,否则为false。
    短路求值:第一个表达式为true执行第二个表达式,第一个表达式为不false执行第二个表达式。
    (2)逻辑或||
    规则:只要有一个表达式为true,则为true,全为false,则为false。
    短路求值:第一个表达式为true,则不执行第二个表达式,第一个为false,则执行第二个表达式。
    例:
    System.out.println(10>20&&10/00);//false
    System.out.println(10<20||10/0
    0);//true
    虽然计算10/0会导致程序异常,但是上面的代码能正常的运行,说明10/0没有被真正的计算。
    3:位运算
    Java中对数据的操作的最小单位不是字节,而是二进制位。
    & | ~ ^
    位操作表示按二进制位运算,计算机中都是使用二进制来表示数据的(01构成的序列),按位运算就是在按照二进制位的每一位依次进行计算。
    (1)按位与&:如果两个二进制位都是1,则结果为1,否则为零。
    (2)按位或||:如果两个二进制位都是0,则结果为0,否则结果为1.
    注意:当&和|的操作数为整数时,表示按位运算,当操作数为boolean时,表示逻辑运算。

    (3)按位取反~;如果该位为0则转为1,该位为1则转为0.
    (4)按位异或^:如果两个数字的二进制位相同,则结果为0,相异结果为1。
    4:移位运算符:
    << >> >>>
    (1)左移<<:最左侧位不要,最右位补0.
    (2)右移>>:最右位不要,最左侧补符号位(正数0,负数1)
    (3)无符号右移>>>:最右侧位不要,最左位补0.
    注:1:左移1位,相当于原数字的2.左移N位,相当于原数字2的N次方。
    2:右移1位,相当于原数字的/2.右移N位,相当于原数字/2的N次方。
    3:由于计算机计算移位效率高于计算乘除,当某个代码正好可以乘除2的N次方的时候可以用移位运算代替。
    4:移动负数位或者移位位数过大都没有意义。
    例题:
    1;求一个整数,在内存当中存储时,二进制1的个数。

    import java.util.Scanner;public class Test {
    public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int a = scanner.nextInt();
    int count=0;
    while(a>0){
    count++;
    a=a&(a-1);

        }
        System.out.println(count);
    

    }
    2;获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列

    }
    2:public class Test {
    public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int a = scanner.nextInt();
    int i=0;
    int n=0;
    for(i=31;i>=1;i=i-2) {
    n = (a >> i) & 1;
    System.out.print(n);

        }
        System.out.println();
        for(i=30;i>=0;i=i-2){
            n=(a>>i)&1;
            System.out.print(n);
    
        }
    }
    

    }
    3:不使用第三个变量,进行两个数字的交换;
    int a=10;
    int b=20;
    a=a^b;
    b=a^b;
    a=a^b;

    5:条件运算符:表达式1?表达式2:表达式3
    当表达式1为true时,整个表达式的值为表达式2的值,当表达式1为false时,整个表达式的值为表达式3的值。
    比较两数大小:a<b?a:b;
    6:运算符的优先级:
    在使用时无需记忆,只要在想要先计算的代码上加括号即可。

    cs