Java基础笔记三:运算符与进制

笔记来源:韩老师的Java教学视频
推荐给每一个人,老师讲解的十分完善。

一。运算符

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

(一)。算数运算符

  1. 是对数值类型的变量进行运算的,在Java中使用的非常多
    在这里插入图片描述
  2. / 除法运算
	public static void main(String[] args){
		System.out.println(10 / 4);
		//因为运算符两边都为int,所以结果为2
		System.out.println(10.0 / 4);
		//因为运算符有一边为double,所以结果为2.5
		double b1 = 10 / 4;//先运算结果为2,自动转换为double类型
		System.out.println(b1);//结果为2.0
	}
  1. % 取模|取余运算

Java 中的 % 运算符并不是取模运算(Modulo Operation),而是取余运算(Complementation)。
(1). 计算方法
对于整数a,b来说,取模运算和取余运算的过程相同:

  • 求整数商:c = a / b
  • 计算模或者余数:r = a − c × b

取模和取余在第一步求商的方法上不同:取余运算在取c的值时,向0方向舍入( 类似ceil()函数 );而取模运算在计算c的值时,向下舍入( 类似floor()函数 )。
(2).Java 示例
Java中的取余运算是%,而取模运算是Math.floorMod()。

	public static void main(String[] args){
		System.out.println(10 % 3);//1
		System.out.println(-10 % 3);//-1
		System.out.println(10 % -3);//1
		System.out.println(-10 % -3);//-1
		
		System.out.println(Math.floorMod(10, 3));//1
		System.out.println(Math.floorMod(-10, 3));//2
		System.out.println(Math.floorMod(10, -3));//-2
		System.out.println(Math.floorMod(-10, -3));//-1
	}
	//%的本质,看作为一个公式:a % b = a - a / b * b;
	//例10 % 3 = 10 - 10 / 3 * 3;
从运行结果可以看出:取余运算结果的符号和a一致,取模运算结果的符号和b一致。
  1. ++ 自增运算
	public static void main(String[] args){
		//作为独立语句使用,前++与后++都等价于i = i + 1;
		int i = 10;
		i++;//11
		++i;//11
		
		/*作为表达式使用
		后++,先赋值后自增
		前++,先自增后赋值*/
		int j = 20;
		int k = j++;//先k = j,再j++
		System.out.println(k + " " +j);//20 21
		k = ++j;//先j++,再k = j
		System.out.println(k + " " +j);//22 22
	}

(二)。关系运算符(比较运算符)

  1. 介绍
    结果都是Boolean型,常用于if结构的条件中或循环结构的条件中
    在这里插入图片描述

(三)。逻辑运算符

  1. 用于连接多个条件(多个关系表达式),最终的结果也是一个Boolean值
    在这里插入图片描述
  2. 短路与&&、逻辑与&
	public static void main(String[] args){
		int a = 1;
		int b = 2;
		//短路与&&:两个条件都为true,结果为true,否则为false
		//第一个条件为false,后面条件不再判断。
		if (a > 10 && ++b < 10) {
			System.out.println("ok");//a > 10为false,不输出
		}
		System.out.println("a=" + a + ",b=" + b);//结果为 a=1,b=2

		//逻辑与&:两个条件都为true,结果为true,否则为false
		//不管第一个值是否为false,两个条件都会判断
		if (a > 10 & ++b < 10) {//执行b++
			System.out.println("ok");//a > 10为false,不输出
		}
		System.out.println("a=" + a + ",b=" + b);//结果为 a=1,b=3
	}
使用多的为短路与&&,效率高
  1. 短路或||
    条件中只要有一个为true,结果为true,否则为false。
    第一个条件为true,后面条件不再判断。
    逻辑或|
    条件中只要有一个为true,结果为true,否则为false。
    不管第一个值是否为false,两个条件都会判断
  2. 取反!
    如果条件本身为true,结果为false,反之为true
  3. 逻辑异或^
    当^两边条件结果不一致时,结果为true,否则为false

(四)。赋值运算符

  1. 就是将某个运算后的值,赋给指定的变量
  2. 分类
    • 基本赋值运算符 =
      int n1 = 12;
    • 复合赋值运算符
      +=、-=、*=、/=、%=等
      a += b; => a = a + b;
      a -= b; => a = a - b;
  3. 特点
    • 运算顺序从右往左
    • 赋值运算符的左边,只能是变量,右边可以是变量、表达式、常量
    • 复合赋值运算符会进行类型转换
      代码理解:
	public static void main(String[] args){
		byte b1 = 1;
		b += 5;//等价与b = (byte)(b + 5);
		//底层b = b + 5;
		b++;//等价与b = (byte)(b + 1);
	}
根据自动提升原则,b + 5或b + 1结果类型应都为int类型,赋值byte类型会报错。
但是符合赋值运算符和自增自减都会有一个类型转换,可以赋值到他本来的类型

(五)。三元运算符

  1. 语法:
    条件运算符 ? 表达式1 : 表达式2;
  2. 规则
    如果条件表达式结果为true,运算后结果为表达式1
    如果条件表达式结果为false,运算后结果为表达式2
  3. 细节
    表达式1和表达式2要为可以赋给接收变量的类型(或可以自动转换)
    代码理解:
	public static void main(String[] args){
		int a = 1;
		int b = 2;
		int c = a < b ? 1.1 : 1.2;//错误,double类型不能自动转int类型
		int c = a < b ? (int)1.1 : (int)1.2;//可以,都为int类型
		double c = a < b ? a : b;//可以,满足自动转换
	}

三元运算符可以转换为if…else语句

(六)。运算符优先级

从上至下阅读

  1. 运算符有不同的优先级,所谓的优先级就是表达式中的运算顺序,如上图的优先级就是从上至下
  2. 只有单目运算符、赋值运算符时从右向左运算的
  3. 简单梳理
    (),{}等
    单目运行:++、–
    算数运算符
    位移运算符
    比较运算符
    逻辑运算符
    三元运算符
    赋值运算符

二。标识符

(一)。概念

  1. Java对各种变量】方法和类等命名使用时使用的字符序列称为标识符
  2. 凡是自己可以起名字的地方都叫标识符

(二)。规则

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

(三)。规范

  1. 包名: 多单词组成时所有字母都小写
    例:aaa.bbb.ccc
  2. 类名、接口名:多单词组成时,所有单词的首字母大写
    例:XxxYxxZzz【大驼峰】
  3. 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始首字母大写
    例:xxxYyyZzz【小驼峰,简称驼峰法】
  4. 常量名:所有字母都大写,多个单词时每个单词用下划线连接
    例:XXX_YYY_ZZZ

(四)。关键字

  1. 被Java语言赋予了特殊含义,用作专门途径的字符串(单词)
  2. 特点:关键词中所有字母都为小写,在软件中会变色

(五)。保留字

现有的Java版本尚未使用,但以后的版本可能会作为关键字使用,定义标识符要避免使用这些保留字

三。键盘输入语句

在编程中,需要接收用户输入的数据,就可以用键盘输入语句来获取

//1.引入Scanner类所在的包
import java.util.Scanner;

public class Comment02 {
	public static void main(String[] args){
		//2.创建Scanner对象
		//	myScanner就是这个对象
		Scanner myScanner = new Scanner(System.in);
		System.out.print("请输入名字:");
		//3.使用next()接受用户输入,程序执行到next()时会等待用户输入,
		//	输入完毕按回车表示
		String name = myScanner.next();
		System.out.print("名字=" + name);
	}
}
Scanner类表示简单文本扫描器,在java.util包

四。进制

对于整数,有四种表达方式:

  1. 二进制:0-1,满2进1,以0b或0B开头
  2. 十进制:0-9,满10进1
  3. 八进制:0-7,满8进1,以数字0开头表示
  4. 十六进制:0-9及A(10)-F(15),满16进1,以0x或0X开头。此处A-F不区分大小写
    在这里插入图片描述
    在这里插入图片描述

(一)。其他进制转十进制

  1. 二进制
    规则:从最低位(右边)开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和
    例:
    在这里插入图片描述
  2. 八进制
    规则:从最低位(右边)开始,将每个位上的数提取出来,乘以8的(位数-1)次方,然后求和
  3. 十六进制
    规则:从最低位(右边)开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和

(二)。十进制转其他进制

  1. 二进制
    规则:将该数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。
    例:34转为二进制=0B00100010
    在这里插入图片描述
  2. 八进制
    规则:将该数不断除以8,直到商为0为止,然后将每步得到的余数倒过来,就是对应的八进制。
  3. 十六进制
    规则:将该数不断除以16,直到商为0为止,然后将每步得到的余数倒过来,就是对应的十六进制。

(三)。二进制转其他进制

  1. 八进制
    规则:从低位开始,将二进制数每三位一组,转成对应的八进制数即可
    在这里插入图片描述
  2. 十六进制
    规则:从低位开始,将二进制数每四位一组,转成对应的十六进制数即可

(四)。其他进制转二进制

  1. 八进制
    规则:将八进制每一位,转成对应的一个3位的二进制数即可
  2. 十六进制
    规则:将十六进制每一位,转成对应的一个4位的二进制数即可

五。位运算符

(一)。原码,反码,补码(重点)

  1. 二进制是逢2进位的进位制,0,1是基本算符,数字1在不同的位上代表不同的值,按从右至左的次序,这个值以二倍递增
  2. 现代的电子计算机技术全部采用的是二进制,因为它只使用0,1两个符号,易于用电子方式实现。
  3. 对于整型数据,其二进制表示形式有三种,分别是:原码、反码、补码,而实际存储的是整型数据的补码。

(二)。对于有符号的而言

  1. 原码、反码以及补码都是有符号的,其中最高位存放符号位,0 表示正数,1 则表示负数。
  2. 正数的原码,补码,反码都一样(三码合一)
  3. 负数的反码 = 它的原码符号位不变,其他位取反
  4. 负数的补码 = 它的反码 + 1,负数的反码 = 负数的补码 - 1
  5. 0的反码,补码都为0
  6. java中没有无符号数,换言之,java中的数都是有符号的
  7. 在计算机运算的时候,都是以补码的方式来运算
  8. 当我们看运算结果的时候,要看他的原码

(三)。位运算符

正数
负数
结果为正数
结果为负数
运算顺序
是否为正数
直接运算结果
取反码
变补码
运算完成
取原码
变反码
取原码
  1. 按位与&:两位全为1,结果为1,否则为0
    在这里插入图片描述
  2. 按位或|:两位有一个为1,结果为1,否则为0
  3. 按位异或^:两位有一个为1,一个为0,结果为1,否则为0
  4. 按位取反~:0 => 1,1 => 0
  5. 算数右移>>:低位溢出,符号位不变,并用符号位补溢出的高位
    a >> b :本质 = a / 2-b
  6. 算数左移<<:符号位不变,低位补0
    a << b :本质 = a * 2b
  7. 逻辑右移(无符号右移)>>>:低位溢出, 高位补0
  8. 没有<<<符号
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值