黑马程序员【运算符_笔记】

运算符

1.对字面量或变量进行操作的符号成为运算符
2.用运算符吧字面量或变量连接起来,符合java语法的式子就可以成为表达式
算数运算符
加+减-乘*除/取模%
在这里插入图片描述取余应用场景:
1.A是否可以被B整除
2.A是否为偶数
3.三个玩家每张牌定义一个序号发牌

练习数值拆分

键盘输入一个数,将其拆分个位.十位.百位,后打印在控制台
在这里插入图片描述
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|

数字相加

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

类型转换的分类

隐式转换(自动类型提升 小变大)
取值范围小的数据自动转换为取值大的数据
byte->short->int->long->float->double
隐式转换两种提升规则
1.取值范围小的和取值范围大的进行计算,小的会先提升为大的,再进行运算
2.byte short char三种类型的数据在运算的时候,都会先提升为int,然后再进行运算
练习:最终运算结果是什么类型?

byte b1 = 10;
byte b2 = 20;
result = bi+b2//int
int i = 10;
long n = 100L;
double d = 20.0;
result = i + n + d;//double
byte b = 10;
short s = 20;
long n = 100L;
result = b+s+n;//long

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

byte b1 = 10;
byte b2 = 20;
byte result = (byte)(b1+b2);//要将b1和b2阔起来

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|

字符串相加

当"+“操作中出现字符串时,这个”+"是字符串连接符,而不是算术运算符.会将前后的数据进行拼接,并产生一个新的字符串
eg:“123”+123->“123123”

连续进行"+"操作时,从左到右逐个执行
eg:1+99+“年黑马”->100年黑马

练习:看代码说结果

Syetem.out.println(3.7+"abc");//"3.7abc"
System.out.println("abc"+true);//"abctrue"
System.out.println('中'+"abc"+true);//中abctrue从左到右连续加只要有字符串参与就是连接
int age = 18;
System.out.println("我的年龄是"+age+"岁");//我的年龄是18岁,其中age是变量,代表数值
System.out.println("我的年龄是"+"age"+"岁");//我的年龄是age岁
System.out.println(1+2+"abc"+2+1);//3abc21

练习:数值拆分
键盘录入一个三位数,将其拆分为个位.十位.百位后,打印在控制台.
在这里插入图片描述

import java.util.Scanner;
public class DevideNumber {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个三位数");
        int i = sc.nextInt();
        int a = i%10;
        i = i/10;
        int b = i%10;
        int c = i/10;
        System.out.println("个位是:"+a);
        System.out.println("十位是:"+b);
        System.out.println("百位是:"+c);
    }
}

字符相加

当字符+字符/字符+数字时,会把字符通过ASCII码表查询到对应的数字再进行计算
65-90A-Z,97-122a-z
练习:看代码说结果

System.out.println(1+'a');///98
System.out.println('a'+"abc")//aabc

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|

自增自减运算符

1.**++变量的值加1
2.
–**变量的值减1
++和–即可以放在变量的前边,也可以放在变量的后边
无论放在变量的前边还是后边,单独写一行结果是一样的

public class ArithDemo1 {
    public static void main(String[] args) {
        int a = 10;
        a++;
        System.out.println(a);//11
        ++a;
        System.out.println(a);//12
        a--;
        System.out.println(a);//11
        --a;
        System.out.println(a);//10
    }
}

自增自减运算符在实际应用中的场景
1.记录年龄
2.购物车修改商品数量
3.统计某一个物品数量

自增自减运算符参与计算

基本不用

int a = 10;
int b = a++;//先用后加
int a = 10;
int b = ++a;//现加后用

小练习

int x = 10;
int y = x++;
int z = ++x;
System.out.println("x:"+x);//12
System.out.println("y:"+y);//10
System.out.println("z:"+z);//12 

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|

赋值运算符

两个符号之间不能有空格
1.=
2.+=
3.-=
4.*=
5./=
6.%=

public class ArithDemo2 {
    public static void main(String[] args) {
        //+=
        int a = 10;
        int b = 20;
        a += b;//a = (int)(a + b)
        System.out.println(a);
        System.out.println(b);
        //+= -= /= %=底层都有强制类型转换
        short s = 1;
        s += 1;//s = (short)(s + 1)
        System.out.println(s);
    }
}

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|

关系运算符

1.==
2.!=
3.>
4.>=
5.<
6.<=
注意
1.关系运算符的结果都是boolean类型,要么是true,要么是false,千万不要把==写成=
2.两个符号之间没有空格

package CompareDemo;

public class CompareoperatorDemo1 {
    public static void main(String[] args) {
        //==
        int a = 10;
        int b = 10;
        int c = 20;
        System.out.println(a==b);
        System.out.println(a==c);
        //!=
    }
}

关系运算符练习
键盘录入两个整数,表示你和你约会对象衣服的时髦度.(手动录入-~10之间的整数,不能录其他)
如果你的时髦程度大于你约会对象的时髦程度,相亲就成功,输出true,否则输出false

package test;

import java.util.Scanner;

public class Fashion {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入自己的时髦度");
        int i = sc.nextInt();
        System.out.println("请输入对方的时髦度");
        int b = sc.nextInt();
        System.out.println(i>b);
    }
}

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|

逻辑运算符

1.& 两边为真才为真
2.| 两边都假才为假
3.^ 相同false,不同true(了解即可)
4.! 取反

package LogicOperator;

public class LogicDemo1 {
    public static void main(String[] args) {
        //&
        System.out.println(true&true);//ctrl+d向下复制一行
        System.out.println(false&false);
        System.out.println(true&false);
        System.out.println(false&true);
        // |
        System.out.println(true|true);
        System.out.println(false|false);
        System.out.println(true|false);
        System.out.println(false|true);
        // !
        System.out.println(!true);
        System.out.println(!false);
    }
}

应用场景
1.用户登录用户名和密码全部正确用户才能登陆成功
2.结婚买房或者买车

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|

短路逻辑运算符

1.&&
2.||
提高程序运行效率,以&&为例,若左边表达式为false则无需看右表达式,结果都为false

package LogicOperator;

public class LogicDemo2 {
    public static void main(String[] args) {
        int a = 10;
        int b = 10;
        boolean result = ++a < 5 && ++b < 5;
        System.out.println(result);
        System.out.println(a);//11
        System.out.println(b);//10
    }
}

练习:逻辑运算符
键盘输入两个整数
如果其中有为6,最终结果输出true.
如果他们的和为6的倍数,最终结果输出true.
其他情况都是false

package test;

import java.util.Scanner;

public class Logictest {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入两个数字");
        int number1 = sc.nextInt();
        int number2 = sc.nextInt();
        System.out.println(number1 == 6 || number2 == 6 ||(number1 + number2) % 6 == 0);
    }
}

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|

三元运算符

定义一个变量记录两个整数的较大值
三元表达式格式
关系表达式?表达式1:表达式2;
1.首先计算关系表达式的值
2.如果表达式为true,表达式1的值就是运算结果
3.如果表达式为false,表达式2的值就是运算结果
整个三元表达式的结果必须被使用:赋值给某一变量或者直接打印

int max = a > b ? a : b;

练习:三元运算符
1.动物园里有两只老虎,体重分别为通过键盘录入获得,请用程序实现判断两只老虎的体重是否相同.

package test;
import java.util.Scanner;
public class test3 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请在键盘中输入两只老虎的体重(kg)");
        int weight = sc.nextInt();
        int weight2 = sc.nextInt();
        System.out.println(weight == weight2 ? true : false);
    }
}

2.一座寺庙里住着三个和尚,已知他们的身高分别为150cm,210cm,165cm,请用程序实现获取三个和尚的最高身高
ctrl+alt+l代码自动对齐

package test;

public class test4 {
    public static void main(String[] args) {
        int height1 = 150;
        int height2 = 210;
        int height3 = 165;
        int highest = height1 > height2 ? (height1 > height3 ? height1 : height3) : (height2 > height3 ? height2 : height3);
        System.out.println(highest);
    }
}

运算符的优先级 小括号优先于所有

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|

原码.反码.补码

原码
十进制数据的二进制表现形式,最左边是符号位,0为正,1为负
56->0 0111000 一位为一个比特位
一个字节的最大值:01111111->127
一个字节的最小值:11111111->-127

利用原码对正数计算是不会有问题的
但如果是负数计算,结果就出错,实际的运算结果和预期的结果是相反的

反码
目的:为了解决原码不能计算负数的问题而出现的
正数的反码不变,负数的反码在原码的基础上,符号位不变,数值取反
-56->10111000->11000111
负数运算的时候,如果结果不跨0,是没有任何问题的,但如果结果跨0,跟实际结果会有1的偏差

补码
目的:为了解决负数计算时跨0的问题而出现的
正数的补码不变,负数的补码在反码的基础上+1
另外补码还能多记录一个特殊的值-128,该数据在一个字节下,没有原码和反码
计算机中的存储和计算都是以补码的形式进行的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

//强制转换
package test;
public class a {
    public static void main(String[] args) {
        int a = 300;//0000 0000 0000 0000 0000 0001 0010 1100
        byte b = (byte)a;//0010 1100
        System.out.println(b);//44
    }
}

//强制转换
package test;
public class a {
    public static void main(String[] args) {
        int a = 200;//0000 0000 0000 0000 0000 0000 1100 1000
        byte b = (byte)a;//1100 1000
        System.out.println(b);//-56
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值