学习Java Day3 (学语法第二篇之运算符+小彩蛋)

运算符:优先级()

今日单独学习语法之运算符比较重要的内容

  • 算术运算符:+,-,*,/,%(模运算,就是取余),++,–
  • 赋值运算符 =
  • 关系运算符:>,<,>=,==(Java里面等于是用这个),!=(这个叫做不等于),instanceof
  • 逻辑运算符:&&(与),||(或),!(非)
  • 位运算符:&, |, ^, ~, >>, <<, >>>(了解!!!)
  • 条件运算符 ? :
  • 扩展赋值运算符 +=,-=,*=,/=
package operator;

public class Demo1 {
    public static void main(String[] args) {
        // 二元运算符
        //Ctrl+D 复制当前行到下一行
        int a = 10;
        int b = 20;
        int c = 25;
        int d = 25;

        System.out.println(a + b);
        System.out.println(a - d);
        System.out.println(a * b);
        System.out.println(a/b);//这样值为0,正常应该是0.5,取整数只能显示0,所以需要强制转换,如下:
        System.out.println(a/(double)b);//正常打印值为0.5
    }
}

再来个练习,

package operator;

public class Demo2 {
    public static void main(String[] args) {
        long a=123123123123123L;
        int b=123;
        short c=10;
        byte d=8;

        System.out.println(a+b+c+d);//Long,如果其中有Long,结果一定是Long,如果其中有个double,结果也一定是double
        System.out.println(b+c+d);//Int
        System.out.println(c+d);//Int
    }
}

以上内容都说明变量是非常重要的内容,需要长期温习;
下面练习下关系运算符。

package operator;

public class Demo3 {
    public static void main(String[] args) {
        //关系运算符返回的结果:正确,错误    布尔值
        //未来经常会跟if结合起来使用
        int a=10;
        int b=20;
        int c=21;

        System.out.println(c%a);//模运算,其实就是取余,打印值1,这个意思是取c除以a的余数,即 c  /  a   21 / 10=2...1

        System.out.println(a>b);//打印值false
        System.out.println(a<b);//true
        System.out.println(a==b);//false
        System.out.println(a!=b);//true
    }
}

再看看++ --运算符,这个非常重要,单独练习☆

package operator;

public class Demo4 {
    public static void main(String[] args) {
        //++  --  叫做自增,自减,也叫一元运算符
        int a=3;

        int b=a++;//a++  相当于a=a+1  自己给自己+1,执行完这行代码后,先给b赋值,再自增
        //相当于这里隐藏了一个a=a+1,此时a值相当于4,示范下:
        System.out.println(a);//打印值为4,没问题
        int c=++a;// 注意这个顺序,意思是执行完这行代码,先自增再给c赋值,所以下面又隐藏了一个a=a+1
        //此时a相当于5了

        System.out.println(a);//打印值为5
        System.out.println(b);//打印值为3,没问题,因为是先赋值了
        System.out.println(c);//打印值为5,没问题,因为先自增再被赋值了
        //-- 也是一样的道理,可以多次往复练习

        /* 拓展下,我们日常幂运算 比如2^3,相当于2的三次方,就是2*2*2=8,Java中没这么写,只能↓↓↓
        很多运算,我们会使用一些工具类来操作
         */
        double pow= Math.pow(2,3);
        System.out.println(pow);//返回值8
    }
}

下面练习逻辑运算符

package operator;

public class Demo5 {
    public static void main(String[] args) {
        // 逻辑运算符
        //&&与(and)   ||或(or)  !非(取反)
        boolean a = true;
        boolean b = false;

        System.out.println("a && b : " + (a && b));//逻辑与运算:两个变量都为真,结果才为true
        System.out.println("a || b : " + (a || b));//逻辑或运算:两个变量有一个为真,则结果就为true
        System.out.println("!(a && b) : " + (!a && b));//如果是真,则变为假,如果是假则变为真

        //拓展,短路运算
        int c=5;
        boolean d = (c<4)&&(c++<4);//短路了,意思是前面是false,则”与“后面不用再运算了也为false

        System.out.println(d);//打印值false
        System.out.println(c);// 打印值为5,没问题,因为后面的++运算短路了,没有运算
    }
}

继续练习位运算

package operator;

public class Demo6 {
    public static void main(String[] args) {
        /*
        A=0011 1100
        B=0000 1101

        A&B =0000 1100 与,意思是上下比较,如果两个都是1则为1,如果有0则为0,所以应该返回0000 1100
        A|B =0011 1101 或,意思是上下比较,如果都是0则为0,否则为1
        A^B =0011 0001 亦或,意思是上下比较,如果位相同则为0,否则为1
        ~B =1111 0010 取反

        拓展,2*8 = 16, 2*2*2*2   计算机最快的计算方式是怎样?
        未来为了极高的运算效率,经常会涉及到二进制以及位运算,效率极高!!!
        <<  左移的意思,*2
        >>  右移的意思,/2

        0000 0000   0
        0000 0001   1
        0000 0010   2
        0000 0011   3
        0000 0100   4
        0000 1000   8
        0001 0000   16
         */

        System.out.println(2<<3);//返回值16,这个意思是在二进制上,左移3位后的数字 *2
    }
}

扩展运算符,懒人运算符,新手不建议使用

package operator;

public class Demo7 {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;

        a+=b;// a=a+b
        a-=b;// a=a-b

        System.out.println(a);

        //拓展知识:字符串连接符  +  ,String
        System.out.println(""+a+b);//返回值1020,空字符串在前面,后面进行拼接
        System.out.println(a+b+"");//返回值30,空字符串在后面,前面会依旧运算
    }
}

再看看条件运算符,也是三元运算符

package operator;

public class Demo8 {
    public static void main(String[] args) {
        //三元运算符
        // x ? y : z
        //如果 x==true,则结果为y, 否则结果为z

        int score = 80;
        String type = score <60 ? "不及格" : "及格";
        //跟if一样,但是这个?:可以让代码更精简好看,也是懒人运算符,但最好掌握

        System.out.println(type);//返回值  及格
    }
}

整体下来,今天学习内容有点枯燥,但好在一直在练习代码,也算比较好,通过今日练习依然感受到变量很重要,需要回头去多加练习。

进制转换原理和计算方式

另外今日学习有几个运算符一直跟进制转换,加上之前对此并不是很了解,所以额外给自己加学了下进制的原理和转换,学会了就得分享,尽量讲的言简意赅。

底层原理

二进制:逢二进一,所以只有0,1,要想用二进制记数,就只能看到例如1101,1011010,101010101011101等这样的东西;
十进制:逢十进一,只有9以内的数字,即,0,1,2,3,4,5,6,7,8,9,也就是我们日常用的方式,表现的数字例如58,837,1908等;
八进制:逢八进一,只有7以内的数字,即0,1,2,3,4,5,6,7,表现为56,365,134等;
十六进制:逢十六进一,只有0到15的数字,即0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,但是因为不能用10,11这样的来继续表示,所以十六进制需要用字母来继续表示,10用A,11用B,12用C,13用D,14用E,15用F,表现出来的数字例如85E,97C;

转换计算方式

  1. 其他进制转换成十进制,从右向左,依次用相应进制的数的几次幂乘以对应数后相加(具体几次就看从右向左第几位-1,例如第一位,就是0次方)例如:
  • 进制1011转换成十进制(相应进制为2):从右向左依次是1✖️2º+1✖️2¹+0✖️2²+1✖️2³=11;
  • 以此类推,八进制用8,例如 733= 3✖️8º+3✖️8¹+7✖️8²=475;
  • 十六进制56a=10✖️16º+6✖️16¹+5✖️16²=1386
    在这里插入图片描述
  1. 十进制转换成其他进制,则一直除以对应进制数到最后除不了为止,再余数倒数即可,例如:
  • 72转为二进制,则为1001000:
    在这里插入图片描述
  • 412转为八进制,则为634:
    在这里插入图片描述
  • 381转为16进制,则为17d:
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值