Java基础知识(算术、赋值、比较、逻辑、位、三目运算符)

1.算术运算符

在这里插入图片描述
算术运算符的注意事项:

(1)对于+运算符

  • 加法
  • 正数
  • 字符串拼接
  • 操作数1 + 操作数2 两个操作数中,只要至少有一个是字符串,+操作执行的就是字符串拼接
 System.out.println("hello" + 'a' + 1);  // helloa1
    System.out.println('a' + 1 + "hello"); // 98hello
    System.out.println("5+5="+5+5); //5+5=55
    System.out.println(5+5+"=5+5");//10=5+5

(2)对于/运算符
整数相除只能得到整数

//隐式类型转化
    double e = 1.0 * a / b;
    System.out.println(e);

(3)%
(4)++和–
(++或–)单独使用效果, 若参与运算,位置不同,效果不同

2.赋值运算符

符号:= , +=, -=, *=, /=, %=,其中=为基本的赋值运算符,其他的为扩展的赋值运算符

3.比较(关系)运算符

在这里插入图片描述
关系运算符的结果只有两种true or false
注意和“=”区分不要把“==”写成“=”

4.逻辑运算符

在这里插入图片描述
注意事项:
关于数值范围的描述的表达,比如 1 < a < 10
单“&”与双“&&”的区别(短路)
异或(^) VS 或(|)运算符

5.位运算符

在这里插入图片描述
在这里插入图片描述

*  位运算符: 针对变量的二进制位来进行运算
 *  移位运算:
 *  a.左移运算符: 3 << 2 = 3 * 2 * 2 = 12
 *               左移一位相当于给操作数 * 2(左移之后的结果仍然在,相应数据类型的表示范围之内)
 *               00000000,00000000,00000000,00000011
 *               移动一位
 *               0000000,00000000,00000000,000000110
 *               在移动一位
 *               000000,00000000,00000000,0000001100 -> 12
 *
 *  b.带符号的移位: -2 >> 1 , 相当于给操作数除以2(只针对,未溢出切,可以被除尽)
 *                 10000000,00000000,00000000,00000010 -> 补码 11111111,11111111,11111111,11111101
 *                                                           +                                  1
 *                                                            11111111,11111111,11111111,11111110
 *                  对于带符号位的右移运算而言:右移运算,高位补符号位
 *                  111111111,11111111,11111111,1111111 -> 10000000,00000000,00000000,00000000
 *                                                                                          +1
 *
 *                                                         10000000,00000000,00000000,00000001  -1
 *                  不能除尽的情况
 *                  000000000,00000000,00000000,00000011 -> 0000000000,00000000,00000000,0000001
 *
 *
 *  c. 无符号右移:移位的动作和带符号数一模一样的,右移之后,高位直接填充0,
 *               无符号右移,同常用来处理正整数,对正整数而言,无符号右移一位相当于除以2
 *
 *  &: 只针对二进制的一位 0或者1,只有两个二进制都为1的时候结果为1,其余全为0
 *      0 & 1 = 0     0 & 0 = 0    1 & 0 = 0  1 & 1 = 1
 *
 *  |:  只有两位全为0的时候结果才为0
 *      0 | 1 = 1    0 | 0 = 0     1 | 0 = 1  1 | 1 = 1
 *
 *  ^: 相同为0,不同为1
 *     0 ^ 1 = 1    0 ^ 0 = 0      1 ^ 0 = 1   1 ^ 1 = 0
 *     性质:
 *     1. 一个数和它自己异或运算的结果:a ^ a = 0
 *     2. 0和任何数做异或运算:0 ^ a = a
 *
 *  ~: 按位取反(包括符号位)
 *     ~6 = -7
 *     00000000,00000000,00000000,00000110
 *     11111111 11111111 11111111 11111001 -> 10000000,00000000,00000000,00000110
 *                                                                             +1
 *                                            10000000,00000000,00000000,00000111
 *
 */
 //举例数据溢出 正整数 + 1 -> 负数
    // 0111 1111,1111 1111,1111 1111,1111 1111
    //                                      +1
    // 1000 0000 0000 0000 0000 0000 0000 0000
    int a = 0x7fffffff; //int类型所能表示的最大正整数
    System.out.println(a + 1);

    //1000 0000,0000 0000,0000 0000,0000 0000
    a = 0x80000000;
    System.out.println(a);
//验证左移 <<
    a = 3;
    int b = 2;
    a = a << 2; //如果要将让操作数变成移位之后的结果,必须要赋值才行
    System.out.println(a << 2);
//验证带符号右移 >>
    a = -1; //1,xxxxxxxxx,   111111111,111111111,11111111,1111111
    System.out.println(a >> 2);
 //无符号右移 >>>
    a = -2;
    // 11111111,11111111,11111111,11111110 -> 无符号右移1位 011111111,11111111,11111111,1111111
    //System.out.println(a >>> 1); //2147483647
  //验证一下异或运算的性质
    a = 90; //异或运算满足交换律
    System.out.println(a ^ a); //性质1
    System.out.println(a ^ 0); //性质2

    System.out.println(~6);

在这里插入图片描述

6.三目运算符

在这里插入图片描述

 // 3数取大
    int c = 100;

    //两数取大,第三个数和两数中的大者比较,取它们的大者就是最大值

    int tmp = a > b ? a : b;
    int result = tmp > c ? tmp : c;
    System.out.println("最大的是: " + result);

    //三目运算的,3数取大的嵌套形式
    //int tmp = a > b ? a : b;
    //int result = tmp > c ? tmp : c;
    result = (a > b ? a : b) > c ? (a > b ? a : b) : c;
    System.out.println("最大的是: " + result);

7. 键盘录入数据

键盘录入数据
我们目前在写程序的时候,数据值都是固定的,但是实际开发中,数据值肯定是变化的,所以,我准备把数据改进为键盘录入,提高程序的灵活性。

如何实现键盘录入数据呢?(目前先记住使用)
导包语句(放到class定义的上面):
import java.util.Scanner;

创建对象
Scanner sc = new Scanner(System.in);

从键盘输入读取数据
int x = sc.nextInt();//录入整数
//读取字符串
//String s = sc.nextLine(); // “hello” String

boolean b = sc.nextBoolean(); //它们都默认以空格分隔不同的输入
String s = sc.nextLine(); //以回车作为数据的分隔符
//用完之后记得关闭
sc.close();

8. 相关题目

  1. 根据键盘录入的数值1,2,3,…7输出对应的星期一,星期二,星期三…星期日。
    (用switch语句实现,代码+运行结果截图)
    在这里插入图片描述

  2. 字长为8,已知原码 0110 1010 和 1100 0110, 求它们的补码
    已知补码 0110 1010 和 1100 0110, 求它们的原码

  3. 语句byte b = 300;编译能通过吗?如果不能,怎样让它通过?转
    换之后其值是多少?
    在这里插入图片描述

3,有三个int变量,a, b, c假设三个变量中有两个变量的值相同,请问如何快速求出,那个和其他两个变量不同的第三个变量的值?(代码+截图)(提示:自己和自己异或为0,任何数和0异或的结果是自己)
在这里插入图片描述

  1. 任给一个int类型的正整数,如何判断该整数的值,是否是2的整数次幂?(代码+截图)
    (提示:任何是2整数次幂的十进制数的二进制有效位都只有一个1)
    在这里插入图片描述
    5.利用switch语句,实现对学生分数评级的功能。
    程序的输入是一个int类型的变量score,代表学生的分数取值范围[0,100]
    当分数范围为 0=< score <60 输出 不及格
    当分数范围为 60=< score <70 输出 及格
    当分数范围为 70=< score <80 输出 中
    当分数范围为 80=< score <90 输出 良
    当分数范围为 90=< score <=100 输出 优
    提示:可合理利用case穿越
    提交代码+运行结果截图哈
    在这里插入图片描述

6,判断一个5位数是否是回文数(比如12321)
个位等于万位
十位等于千位

提交代码+运行结果截图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值