04、Java学习-运算符

Java学习第四天~第六天之运算符

(韩顺平103/910)——后面的总结我一般就不听了,因为我自己做了总结~
ps:周末真的很容易摆烂~居然学了三天吗QWQ

运算符介绍:

运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。

  1. 算数运算符;
  2. 关系运算符(比较运算符);
  3. 逻辑运算符;
  4. 位运算符(需要二进制基础);
  5. 三元运算符;

算数运算符:

对数值类型的变量进行运算的,再Java程序中使用的很多。

加减乘除,取模(取余);自增++(前,后两种);自减(前,后两种);拼接(+,有一个为字符串类型的时候执行)。

细节:

  1. +,-,*,/,%,++,–,重点在%,++,–上;
/**
 *演示算数运算符的使用
 */
public class ArithmeticOperator{
	public static void main(String[] args){
		// +,-,*,/,%,++,--
		System.out.println(10/4);// 从数学看是2.5,但由于是整数类型,所以会去除小数点即后面的部分
		System.out.println(10.0/4);// 现在是2.5,所以要是要保留小数点,一定要有一个是浮点数的类型。
		double d = 10 / 4;// 由于设定了d是double类型
		// 所以虽然后面都是int类型,算出来的值先去除了小数点和后面的数字为2;
		// 但要将int赋值给double类型的变量,所以变为了2.0(这和C与Python很不一样)
		System.out.println(d);

		// 取摸的本质: a % b = a- (int)a/b*b(注意这里是整除)。
        // 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

		// ++的使用:
		// 作为独立语句使用,前后无区别;
		int i = 10;
		i++; // 等价于 i = i + 1
		++i; // 等价于 i = i + 1
		System.out.println("i=" + i);

		/*
		作为表达式使用,是有区别的:
		前——先增后赋值;
		后——先赋值,再增加。
		 */
		int j = 8;
		int k = j++;
		System.out.println(k);
		System.out.println(j);
		k = ++j;
		System.out.println(k);
		System.out.println(j);

	}
}

赋值运算符:

赋值运算符就是将某个运算后的值,赋给指定的变量。

分类:

基本赋值运算符=:

int a = 10;这就是最基本的赋值运算符。

复合运算符:

+=、-=、*=、/=、%=。

a += b;就是 a = a+b。

赋值运算符的特点:

  1. 运算符顺序从右往左(int num = a + b + c;体现为先计算为a + b + c再将其赋值为num。)
  2. 赋值运算符的左边,只能是变量,右边可以是变量、表达式、常量值;
  3. 复合赋值运算符的运算如何进行(分类已经提及,不再赘述);
  4. 复合赋值运算会进行类型的强制转换。
    1. byte b = b + 2;
    2. 等价于 byte b = (byte)(b+2);

++运算也是含有类型的强制转换的。


逻辑运算符:

逻辑运算符用于连接多个条件(关系表达式),最终的结果也是一个boolean值。

有短路效应的运算符:

&&短路与:

表达式1 && 表达式2

  1. 当且仅当两个表达式的值都为true是,才为真,否则为假;
  2. 当表达式1为假,不再运行表达式2;
  3. 效率高,编程常用。

短路或||:

表达式1 || 表达式2

  1. 当一个表达式的结果为true,结果就为true,否则为false;
  2. 当表达式1为true,不再运行表达式2;
  3. 效率高,编程常用。

无短路效应的运算符:

&无短路效应的与:

与&&类似,只是没有短路效应,所以运算效率低,编程不常用。

|无短路效应的或:

与||类似,只是没有短路效应,所以运算效率低,编程不常用。

!逻辑非运算:

取反操作,原本真变假,假变真。

^逻辑异或操作:

当两个操作数的结果都相同时,为fales,否则为真。


关系运算符:

关系运算符的结果都是boolean型,要么是true,要么是false;

关系表达式经常用与if结构的条件中或循环结构的条件中。

关系运算符类型:

  • ==:判断是否相等;
  • <=:判断是否小于等于;
  • **>=:**判断是否大于等于;
  • >:判断是否大于;
  • <:判断是否小于;
  • !=:判断是否不等于;
  • instanceof——检查是否是类的对象。

位运算符:

进制:

对于整数,有四种表示方法:

  1. 二进制——0,1;满二进一,以0b或0B开头;
  2. 十进制——0-9;满十进一;
  3. 八进制——0-7;满八进一,以数字0开头;
  4. 十六进制——0-9,A-F,满16进1,以0x或0X开头表示。
public class BinaryTest{
	public static void main(String[] args){
		int n1 = 0b100;
		int n2 = 0100;
		int n3 = 100;
		int n4 = 0x100;
		System.out.println("二进制:" + n1);
		System.out.println("八进制:" + n2);
		System.out.println("十进制:" + n3);
		System.out.println("十六进制:" + n4);

	}
}

进制转换:

其它进制转十进制:

从最低位(默认最右边)开始,将每个位上的数提取出来,乘以基数的位数-1次方,然后求和

十进制转其它进制:

除基取余法,直到结果为0,然后将余数倒过来,就是其它进制。

转换为二进制的时候,要注意,不满8位要补0,因为一个字节有8位。

二进制转八、十六进制:

  1. 转八进制,从右开始,每三位一组,转为相应的八进制数即可;(不足三位的在高位补0)
  2. 转十六进制,从右开始,每四位一组,转为相应的十六进制即可;(不足四位的在高位补0)

八进制、十六进制转二进制:

  1. 从右开始,每位八进制数转换为三位二进制数;
  2. 从右开始,每位十六进制数转换为四位二进制数。

原码,补码,反码(要背):

对于有符号的而言:

  1. 二进制的最高位是符号位:0表示正数,1表示负数;
  2. 正数的原码、补码和反码都是一样的;
  3. 负数的反码=原码的符号位不变,其它位按位取反;
  4. 负数的补码=反码+1;
  5. 0的反码,补码都是0;
  6. java没有无符号数;
  7. 在计算机运行时,都是以补码的方式来运算的;(用补码就将正数和负数相整合了)
  8. 当我们看运算结果的时候,要看他的原码(重要)。

位运算:

java中有7个位运算符:

  1. 按位与 &:两位全为1,相应的位上结果为1,否则为0;
  2. 按位或 |:只要一位为1,相应的位上结果为1,否则为0;
  3. 按位异或 ^:两位不一样,结果为1,否则为0;
  4. 按位取反 ~:0变1,1变0;
  5. 算数右移 >>:低位溢出,符号位不变,并用符号位补溢出的高位;
  6. 算数左移 <<:符号位变,低位补0;
  7. 逻辑右移 >>>:无符号右移,低位溢出,高位补0;
  8. 没有 <<< 符号。
// 位运算:
public class BitOperator{
	public static void main(String[] args){
		// 在计算机中的运算都是靠补码
		// 1.先得到2的补码——00000000 00000000 00000000 00000010;
		// 2.再得到3的补码——00000000 00000000 00000000 00000011;
		// 3.按位与——00000000 00000000 00000000 00000010——是补码;
		// 4.输出要将其转换为原码形式再输出,由于正数三码合一,就是上文的值,输出转为十进制。
		System.out.println(2&3);

		// 1.-2的补码:
		// 先得到-2的原码:	10000000 00000000 00000000 00000010;
		// 再得到-2的反码:	11111111 11111111 11111111 11111101;
		// 最后得到-2的补码:	11111111 11111111 11111111 11111110;
		// 2.按位取反:		00000000 00000000 00000000 00000001;
		// 3.输出要将其转换为原码形式再输出,由于正数三码合一,就是上文的值,输出转为10进制。
		System.out.println(~-2);

		// 1.2的补码: 				00000000 00000000 00000000 00000010;
		// 2.按位取反:				11111111 11111111 11111111 11111101;
		// 3.输出先换原码,先为反码:	11111111 11111111 11111111 11111100;
		// 				  再为原码: 10000000 00000000 00000000 00000011;(-3)
		System.out.println(~2);
		
		// 1、1的补码—— 00000000 00000000 00000000 00000001;
		// 2、右移两位——00000000 00000000 00000000 00000000;低位溢出,高位补符号位
		// 3、本质是1/2/2.
		int a = 1 >> 2;
		// 1、1的补码—— 00000000 00000000 00000000 00000001;
		// 2、左移两位——00000000 00000000 00000000 00000100;符号位不变,低位补0;
		// 3、本质是1*2*2
		int b = 1 << 2;
		// 1、1的补码—— 11111111 11111111 11111111 11111111;
		// 2、无符号右移,高位补0,低位溢出:00111111 11111111 11111111 11111111
		int c = -1 >>> 2;
		System.out.println(a);
		System.out.println(b);
		System.out.println(c);

	}
}

三元运算符:

基本语法:

条件表达式 ? 表达式1:表达式2;

运算规则:

  • 若条件表达式的结果为true,返回的结果为表达式1的值;
  • 若条件表达式的结果为假,返回的结果为表达式2的值。
  • 真1假2

使用细节:

  1. 表达式1和表达式2要为可以赋值给接受变量的类型(或可以自动转换);
  2. 三元运算符可以转换为if–else语句

练习:如何使用三元运算符求取三个数里最大的值?

/**
 * 三元运算符演示:
 */
public class TernaryOperator{
	public static void main(String[] args){
		int a = 10;
		int b = 99;
		int result = a>b ? a++ : b--;
		System.out.println(result);

		// 思路:
		// 1、先求出两个数的最大值;
		// 2、再和第三个值进行比较。
		int n1 = 10;
		int n2 = 12;
		int n3 = 99;
		int max1 = n1>=n2?n1:n2;
		int result1 = max1>=n3?max1:n3;
		System.out.println(result1);

		// 使用一条语句:
		// 推荐分步实现,一步实现看着太乱了。
		int max = (n1>=n2?n1:n2)>=n3?(n1>=n2?n1:n2):n3;
		System.out.println("max="+max);
	}
}

运算符的优先级:

  1. 运算符有不同的优先级,所谓的优先级就是表达式运算中的运算顺序;(从上到下依次降低)
  2. 只有单目运算符(针对一个数的操作运算符)、赋值运算符是从左到右运算的。
. () {} ; ,
R -> L++ – ~ !(data type)
L -> R* / %
L -> R+ -
L -> R<< >> >>> 位移
L -> R< > <= >= instanceof
L -> R== !=
L -> R&
L -> R^
L -> R|
L -> R&&
L -> R||
L -> R? :
R -> L= *= /= %=
+= -= <<= >>=
>>>= &= ^= |=

小结:

不用刻意去背,使用多了就熟悉了;

  1. () , {}等
  2. 单目运算;
  3. 算数运算符;
  4. 位移运算符;
  5. 关系(比较)运算符;
  6. 逻辑运算符(非短路的优先级高,与比或的优先级高)
  7. 三元运算符;
  8. 赋值运算符。

标识符的命名规则和规范:

规则——必须遵守;

规范——遵守更好。

标识符的概念:

  1. Java对各种变量、方法和类命名时的字符序列就是标识符;
  2. 凡是自己可以取名的地方都叫标识符。

命名规则:

  1. 由26个英文字母(大小写),0-9数字或_$组成;
  2. 数字不可以开头;
  3. 不可以使用关键字或者保留字,但能包含关键字或保留字;
  4. 严格区分大小写,长度大小无限制;
  5. 标识符不能包含空格。

命名规范[这样做更专业]:

  1. 包名:多单词组成时所有字母都小写:aaa.bbb.ccc;
  2. 类名、接口名:多单词组成时,所有单词的首字母要大写:AaaBbbCcc【大驼峰命名方式】;
  3. 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz【小驼峰法,简称驼峰法】;
  4. 常量名:所有的字母都大写,多单词之间用下划线间隔:XXX_YYY_ZZZ;
  5. 以后会有文档,更加详细的就看里面了。(一般只用英文,很少用拼音)。

键盘输入语句:

在编程的过程中,我们需要接收用户的输入,就可以使用键盘输入语句来获取Input.java,需要一个扫描器(对象),就是Scanner:

  1. 导入该类所在的包,java.util.*;
  2. 创建该类对象(声明变量);
  3. 调用里面的功能。
/**
 * 要求:可以从控制台接受用户信息
 * [姓名,年龄,薪水]。
 */
// Scanner表示一个简单的文本扫描器
import java.util.Scanner;//表示将java.util下的Scanner类导入
public class Input{

	public static void main(String[] args){
		// 创建 Scanner 对象,new 创建一个对象
		Scanner myScanner = new Scanner(System.in);
		System.out.println("请输入名字:");
		// 接收用户输入,使用相关方法
		String name = myScanner.next();// 用于接受用户输入字符串
		// 当程序执行到了next方法时,会等待用户输入~~~
		System.out.println("请输入年龄:");
		int age = myScanner.nextInt();// 用于接受用户输入int
		System.out.println("请输入薪水:");
		double salary = myScanner.nextDouble();// 用于输入接受double
		System.out.println("人的信息如下:");
		System.out.println("名字=" + name + " 年龄=" + age + " 薪水:" + salary);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江弦凤歌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值