苦学Java笔记(day03)


一、运算符

运算符:对字面量或者变量进行操作的符号
表达式:用运算符把字面量或者变量连接起来,符合Java语法的式子
不同运算符连接的表达式体现的是不同类型的表达式

1.算术运算符

+和-和*:在代码中,如果有小数参与计算,结果有可能不精确。
/:整数参与计算,结果只能得到整数;
小数参与计算,结果有可能不精确

+

数字相加

数字进行运算时,数据类型不一样不能运算,需要转成一样的,才能运算。

隐式转换(自动类型提升)

将取值范围小的数值转换为取值范围大的数值(不需要额外写代码实现,程序自动转化)
byte<short<int<long<float<double

public class Demo1{
	public static void main(String[] args){
		int a = 10;
		double b = 12.3;
		数据类型?c = a + b;//double
	}
}

byte、short、char三种类型的数据在运算的时候,都会直接先提升为int,然后再进行运算

public class Demo2{
	public static void main(String[] args){
		byte a = 10;
		byte b = 20;
		数据类型?c = a + b;//int
	}
}
强制转换

将取值范围大的数值转换为取值范围小的数值
如果把一个取值范围大的数值,赋值给取值范围小的变量,是不允许直接赋值的。如果一定要这么做就需要加入强制转换。
格式:目标数据类型 变量名 = (目标数据类型)被强转的数据

public class Demo3{
	public static void main(String[] args){
	double a = 12.3;
	int b = (int)a;
	}
}

强制转换可能导致数据发生错误

public class Demo4{
	public static void main(String[] args){
	int a = 300;
	byte b = (byte)a;
	}
}
字符串相加

当“+”操作中出现字符串时,这个“+”是字符串连接符,而不是算术运算符了。会将前后的数据进行拼接,并产生一个新的字符串。

public class Demo5{
	public static void main(String[] args){
		System.out.println("123" + 123);//"123123"
	}
}

“123”+123->“123123”
连续进行“+”操作时,从左到右逐个执行。

public class Demo6{
	public static void main(String[] args){
		System.out.println(1 + 99 + "年黑马");//"100年黑马"
	}
}
字符相加

当字符+字符或字符+数字时,会把字符通过ASCII码表查询到对应的数字再进行计算。

public class Demo7{
	public static void main(String[] args){
		System.out.println(1 + 'a');//98
	}
}
public class Demo8{
	public static void main(String[] args){
		System.out.println('a' + "abc");//"aabc"
	}
}

-

*

/和%(取模、取余)

区别:两个数据做除法,/取结果的商,%取结果的余数。
整数操作只能得到整数,要想得到小数,必须有浮点数参与运算。
%只能整数参与计算。

数值拆分

键盘录入一个三位数,将其拆分为个位、十位、百位后,打印在控制台
公式总结:
个位:数值%10
十位:数值/10%10
百位:数值/100%10
千位:数值/1000%10

import java.util.Scanner;
public class Arithmetic{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		System.out.println("Please write a three-digit number");
		int n = sc.nextInt();
		int a,b,c;
		a=n%10;
		b=n/10%10;
		c=n/100%10;
		System.out.println("The units digit is:"+a);
		System.out.println("The tens digit is:"+b);
		System.out.println("The hundreds digit is:"+c);
	}
}

2.自增自减运算符

++ 自增运算符
– 自减运算符
++和–既可以放在变量的前边,也可以放在变量的后边。

(1)单独使用

++和–无论是放在变量的前边还是后边,单独写一行结果是一样的。

(2)参与计算

public class Demo9{
	public static void main(String[] args){
		int a = 10;
		int b = a++;//先++->先用后加:a=11,b=10
	}
}
public class Demo10{
	public static void main(String[] args){
		int a = 10;
		int b = ++a;//后++->先加后用:a=11,b=11
	}
}

3.赋值运算符

=

+=

将左边和右边进行相加,然后再把结果赋值给左边。
细节:底层都隐藏了一个强制类型转换

public class Demo11{
	public static void main(String[] args){
		short s = 1;
		s += 1;//等同于s = (short) (s+1);
	}
}

-=

*=

/=

%=

4.关系运算符(比较运算符)

关系运算符的结果都是boolean类型,要么为true,要么为false。
千万不要把“==”误写成“=”。
两个符号中间没有空格。

==

!=

>

>=

<

<=

约会

您和您的约会对象在餐厅里面正在约会。
键盘录入两个整数,表示你和你约会对象衣服的时髦度。(手动录入0~10之间的整数,不能录其他)
如果你的时髦程度大于你对象的时髦程度,相亲就成功,输出true。
否则,输出false。

import java.util.Scanner;
public class CompareOperate{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		System.out.println("Please enter the fashion level of your clothes(0~10)");
		int myFashion = sc.nextInt();
		System.out.println("Please enter the fashion level of your date's clothes(0~10)");
		 int dateFashion = sc.nextInt();
		 System.out.println(myFashion > dateFashion);
	}
}

5.逻辑运算符

最常用的逻辑运算符:&&、||、!

&逻辑与(且)

并且,两边都为真,结果才是真

|逻辑或

或者,两边都为假,结果才是假

^逻辑异或

相同为false,不同为true

!逻辑非(取反)

取反的感叹号不要写多次,要么不写,要么写一次。

短路逻辑运算符

当左边的表达式能确定最终的结果,那么右边就不会参与运行了。
提高程序运行效率。

&&短路与(而且)

结果和&相同,但是有短路效果
判断用户名 && 判断密码
当用户名正确会判断密码
当用户名错误不会判断密码,直接false

public class LogicOperate1{
	public static void main(String[] args){
		int a = 10;
		int b = 10;
		boolean result = ++a<5 && ++b<5;
		System.out.println(result);//false
		System.out.println(a);//11
		System.out.println(b);//10
	}
}
public class LogicOperate2{
	public static void main(String[] args){
		int a = 10;
		int b = 10;
		boolean result = ++a<5 & ++b<5;
		System.out.println(result);//false
		System.out.println(a);//11
		System.out.println(b);//11
	}
}
||短路或(或者)

结果和|相同,但是有短路效果
如果没房需要再看车
如果有房无需再看车,直接穿走小棉袄

Ctrl+D向下复制一行

数字6

数字6是一个真正伟大的数字,键盘录入两个整数。
如果其中一个为6,最终结果输出true。
如果它们的和为6的倍数,最终结果输出true。
其他情况都是false。

import java.util.Scanner;
public class LogicOperate3{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		System.out.println("Please enter the first integer");
		int number1 = sc.nextInt();
		System.out.println("Please enter the second integer");
		int number2 = sc.nextInt();
		boolean result;
		if(number1 == 6 || number2 == 6 || (number1 + number2 ) % 6 == 0)
			result = true;
		else
			result = false;
			System.out.println(result);
	}
}

6.三元运算符(三元表达式)

格式:
关系表达式?表达式1:表达式2;
关系表达式为真,表达式1的结果为整个三元表达式的结果;
否则,表达式2的结果为整个三元表达式的结果。
三元表达式的结果必须要被使用:赋值或者打印。
求两个数的较大值:
int max = a > b ? a : b;
System.out.println(a > b ? a : b);

两只老虎

动物园里有两只老虎,体重分别为键盘录入获得,请用程序实现判断两只老虎的体重是否相同。

import java.util.Scanner;
public class TwoTigers1{//不用三元表达式
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		System.out.println("Please enter the weight of the first tiger");
		double firstTigerWeight = sc.nextDouble();
		System.out.println("Please enter the weight of the second tiger");
		double secondTigerWeight = sc.nextDouble();
		System.out.println("Does the  two tigers have the same weight?");
		System.out.println(firstTigerWeight == secondTigerWeight);
	}
}

或用三元表达式

import java.util.Scanner;
public class TwoTigers2{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		System.out.println("Please enter the weight of the first tiger");
		double firstTigerWeight = sc.nextDouble();
		System.out.println("Please enter the weight of the second tiger");
		double secondTigerWeight = sc.nextDouble();
		System.out.println(firstTigerWeight == secondTigerWeight ? "same" : "not same");
	}
}

和尚的最高身高

一座寺庙里住着三个和尚,已知他们的身高分别为150cm、210cm、165cm,请用程序实现获取着三个和尚的最高身高。

public class BonzesMaxHeight{
	public static void main(String[] args){
		int firstHeight = 150,secondHeight = 210,thirdHeight = 165;
		int maxHeight = firstHeight > secondHeight ? firstHeight : secondHeight;
		maxHeight = maxHeight > thirdHeight ? maxHeight : thirdHeight;
		System.out.println(maxHeight+"cm");
	}
}

Ctrl+Alt+L:自动格式化代码(自动对齐)

7.运算符优先级

()优先于所有

二、原码、反码、补码

1.原码

十进制数据的二进制表现形式,最左边是符号位,0位正,1为负。
利用原码对正数进行计算是不会有问题的。
但是如果是负数计算,结果就出错,实际运算的结果,跟我们预期的结果是相反的。
一个0或1为1bit,一个比特位
一个字节有八个比特位:-127~127

2.反码

为了解决原码不能计算负数的问题而出现的。
计算规则:正数的反码不变;负数的反码在原码的基础上,符号位不变,数值位取反,0变1,1变0。

反码的弊端

在反码中,0有两种表现形式:0000 0000和1111 1111
跨0会有一个1的误差。

3.补码

为了解决负数计算时跨0的问题而出现的。
正数的补码不变;负数补码=反码+1。
数字的存储和运算都是以补码的形式进行的。
补码:1000 0000 为-128,没有原码和反码
一个字节:-128~127

隐式转换

前面补0

强制转换

去掉前面不要的

其他运算符

& 逻辑与

计算数字,没有短路
0为false,1为true

|逻辑或

计算数字,没有短路
0为false,1为true

<< 左移

向左移动,低位补0
a<<1,左移一次,乘2;左移两次,乘4。

>右移

向右移动,高位补0或1:
如果原来是负数,补1;原来是整数,补0。
右移一次,除2;右移两次,除四。

>>>无符号右移

向右移动,高位补0

  • 23
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值