Java学习第四章 算术运算符

算数运算符的使用(演示)

public class ArithmeticOperator{
    public static void main(String[] args){
        System.out.println(10/4);// 从数学来看是2.5,Java中是2
        System.out.println(10.0/4);//此时输出是2.5
        double d = 10 / 4;  
        System.out.println(d);//此时输出2.0, 这里只提升了精度 
        
        // % 取模,取余
        System.out.println(10 % 3); //1
        System.out.println(-10 % 3); //-1
        System.out.println(10 % -3); //1
        System.out.println(-10 % -3);// 1
        //特别注意:
        //%(取模)的本质:a % b = a - a / b *b
        //例子:10 % -3 = 10 - (10 / -3) *(-3) = 10 - (-3) * 3 = 10 -9=1; 
        //++的使用
        int i = 10;
        i++;
        ++i;
        System.out.println(i);//当单独使用时,两个都表示自增,结果为12
        /*
        作为表达式使用时
        前++:++i表示先自增后赋值
        后++;i++表示先赋值后自增
        */
        int j = 8;
        int k = ++j;
        System.out.println("k=" + k +"j=" + j);//输出k=9 j=9;
        //int k = j++;
        //System.out.println("k=" + k + "j+" + j)//此时输出的是:k = 8  j = 9        
    }
}

面试题练习

        1.int i = 1;

        i = i ++;

        System.out.println(i);

        问:输出结果是什么,为什么?

public class exercise01{
    public static void main(String[] args){
        int i = 1;
        i = i ++;//规则使用临时变量:(1)temp=i;(2)i=i++;(3)i=temp;
        System.out.println(i);
    }
}
//输出结果为 1
//如果 i = ++i;那么则输出2
//此时的规则是 :(1)i = i++;(2)temp = i;(3)i=temp;
//这两给规则的差距也就是先加还是后加的问题

2.假如还有59天放假,问:合xx个星期零xx天

public class exercise02{
    public static void main(String[] args){
        int days = 59;
        int weeks = days / 7;
        int leftdays = days % 7;
        System.out.println(days + "天 合" + weeks + "个星期零" + leftdays + "天");
    }
}

3.定义一个变量保存华氏温度,华氏温度转换摄氏温度的公式为:5/9 *(华氏温度 -100),请求出华氏温度对应的摄氏温度

public class exercise03{
    public static void main(String[] args){
        double huashi = 234.6;
        double sheshi = 5.0 / 9 * (huashi - 100);
        System.out.println("华氏温度" + huashi + "对应" + sheshi + "摄氏度");
    }
}

注意

(1)%(取模)的本质:a % b = a - a / b *b

(2)后++规则 :(1) temp=i;(2)i=i++;(3)i=temp;

(3)前++规则:(1)i = i++;(2)temp = i;(3)i=temp;

关系运算符

(1)关系运算符的结果都是boolean型,也就是要么是true,要么是false。

(2)关系运算符组成的表达式,我们称之为关系表达式。例:a > b

(3)比较运算符“==”不能误写成“=”

逻辑运算符

  • &&和&基本规则

    名称语法特点
    短路与&&条件1&&条件2两个条件都为true,结果为true
    逻辑与&条件1&条件2两个条件都为true,结果为true

    区别:

    &&短路与:如果第一个条件为false,则第二个条件不判断,最终结果为false,效率高

    &逻辑与:不管第一个结果是否为false,第二个条件都要判断,效率低

    开发中基本使用&&,效率高

  • ||短路或和|逻辑或的道理和上述一样

    在开发中使用的基本都是||,效率高

  • ! 取反操作

    特点:如果条件本身成立,结果为false,否则为true(真变假,假变真)

  • ^异或操作

    特点:当a和b不同时,结果为true,否则为false

赋值运算符

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

  • 例:a + = b //等价于 a = a + b

    a - = b //等价于 a = a - b

  • 特点:

    (1)运算顺序从左往右 int num = a + b + c

    (2)赋值运算符的左边只能是变量,右边可以是变量,表达式,常量值

    (3)复合赋值运算符会进行类型转换

    解释:

public class AssignOperator{
    public static void main(String[] args){
        byte b = 1;
        b += 2; //等价于 b = (byte)(b+2) 就是说 b+2 运算完后其实是int类型,赋值运算符直接将int型的数据转为了byte
        b++;//也是一样的道理,都是直接进行了类型转换
    }
}

三元运算符

  • 运算规则

    如果条件表达式为true,运算后的结果是表达式1;

    如果条件表达式为false,运算后的结果是表达式2;

    口诀:(一真大师)

  • 例:

public class TernaryOperator{
    public static void main(String[] args){
        int a = 10;
        int b = 20;
        //a<b,因此返回b--;
        //因为b--是后--,所以应该先赋值后自减
        //最后输出为 result=20  a=10  b=19
        int result = a > b ? a++ : b--;
        System.out.println("result = "
                           + result + '\n' + "a = " + a + '\n'+"b = " + b);
    }
}

细节

(1)表达式1和表达式2要为可以赋给接受变量的类型(或可以自动转换)

(2)三元运算符

练习:实现三个数的最大值

可以转成if--else语句

public class Ternary0peratorExercise{
    public static void main(String[] args){
        int a = 2;
        int b = 5;
        int c = 8;
        int result1 = a > b ? a : b;
        int result2 = result1 > c ? result1 : c;
        System.out.println(result2);
    }
}

标识符

  • (1)概念:Java对各种变量,方法和类等命名时使用的字符序列称为标识符

    (2)凡是自己可以起名字的地方都叫标识符

  • 命名规则:

    (1)由26个英文字母大小写,0~9,_或$组成

    (2)数字不可以开头。int 3ab = 1;

    (3)不可以使用关键字(class int等)和保留字(goto),但能包含关键字和保留字

    (4)Java中严格区分大小写,长度无限制

    (5)标识符不能包含空格

  • 例子

    hsp // ok

    1hsp // 错误

    h-s //错误

    h s // 错误:有空格

键盘输入语句

  • 介绍:在编程中,需要接受用户输入的数据,就可以使用键盘输入语句来获取。Input.java,需要一个扫描器(对象),就是Scanner

  • 步骤:

    (1)导入该类的所在包,java。util.*

    (2)创建该类对象(声明变量)

    (3)调用里面的功能

  • 例:要求可以从控制台接收用户信息,(姓名,年龄,薪水)

import java.util.Scanner;
public class input{
    public static void main(String[] args){
        Scanner myscanner = new Scanner(System.in);//创建Scanner对象,new一个对象,myscanner就是Scanner的对象
        System.out.println("请输入您的名字");
        String name = myscanner.next();
        System.out.println("请输入您的年龄");
        int age = myscanner.nextInt();
        System.out.println("请输入您的薪水");
        double sal = myscanner.nextDouble();
        System.out.println("人的信息如下");
        System.out.println("name=" + name + "age = " + "sal=" + sal);
    }
}

原码、反码、补码

(1)二进制的最高位是符号位:0表示正数,1表示负数

(2)正数的原码、反码、补码都一样(三码合一)

(3)负数的反码 = 符号位不变,其他位取反

(4)负数的补码 = 反码 + 1,负数的反码 = 负数的补码 - 1

(5)0的反码补码都是0

(6)java中没有无符号数

(7)在计算机运算的时候,都是以补码的方式来运算的

(8)当我们看运算结果的时候,要看他的原码

  • 位运算符

    Java中有7个位运算符(&,|,^,~,>>,<<,和>>>)

    按位与& :两位全为1,结果位1,否则为0

    按位或| :两位有一个为1,结果为1;否则为0

    按位异或^ :两位一个为0,一个为1,否则为0

    按位取反 ~:对应位置取反

  • 例:

//位运算
public class TernaryOperatorDetail{
    public static void main(String[] args){
        System.out.println(2&3); 
        /*推导:2的原码:00000000 00000000 00000000 00000010
             2的补码:00000000 00000000 00000000 00000010
             3的原码:00000000 00000000 00000000 00000011
             3的补码:00000000 00000000 00000000 00000011(因为都是正数,所以三码合一)
             按位与结果(补码):00000000 00000000 00000000 00000010
            最终结果(原码)00000000 00000000 00000000 00000010
            输出:2*/
        System.out.println(~-2);
        /*推导:-2的原码:10000000 00000000 00000000 00000010
             -2的反码:11111111 11111111 11111111 11111101
             -2的补码:11111111 11111111 11111111 11111110
             按位取反:00000000 00000000 00000000 00000001
             
            输出1*/
        System.out.println(-2|-3);
        /*推导:-2的原码:10000000 00000000 00000000 00000010
             -2的反码:11111111 11111111 11111111 11111101
             -2的补码:11111111 11111111 11111111 11111110
             -3的原码:10000000 00000000 00000000 00000011
             -3的反码:11111111 11111111 11111111 11111100
             -3的补码:11111111 11111111 11111111 11111101
             按位或结果(补码):11111111 11111111 11111111 111111111
             结果反码:11111111 11111111 11111111 11111110
            结果的原码:10000000 00000000 00000000 00000001
            输出:-1*/
    }
}

本章作业

(1)计算下列表达式的结果

10/3 = 3;10/5 = 2; 10 % 2 = 0; -10.5 % 3 = -1.5(近似值)

(2)说出下列代码的结果

int i = 66;
System.out.println(++i+i);
//结果:67 + 67 = 134

(3)试写出将String转换成double类型的语句,以及将char类型转换称String的语句

String str = "1.88";
double d1 = Double.parseDouble(str);

char c1='程';
String str2 = c1 + ""

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值