-
算数运算符是一种特殊的符号,用以表示数据点运算、赋值和比较等。
% 是取模(取余)
public class ArithmeticOperator{
public static void main(String[] args){
System.out.println(10 / 4); //从数学的角度看是2.5,但是因为Java默认10和4为整数int类型,所以输出为2
System.out.println(10.0 / 4); //此时输出为2.5
double d = 10 / 4; //先进行10/4运算,得到的是2,然后2再赋值给d,所以d=2.0
System.out.println(d);
}
}
取模的使用
% 的本质 看一个公式 a % b = a - a / b * b
public class ArithmeticOperator{
public static void main(String[] args){
System.out.println(10 % 3); //1
System.out.println(-10 % 3); //-1
System.out.println(10 % -3); //1
}
}
算术运算符面试题
-
int i = 1;
i = i++;
System.out.println(i);
问结果是什么?为什么?
结果是1,规则使用临时变量:(1) temp = i; (2) i = i + 1; (3) i = temp;
这样记,i = 1已经赋值给了 i ,所以 i = 1,之后 i 又自增,自增完之后并没有赋值
-
int i = 1;
i = ++i;
System.out.println(i);
输出为2
prinln是输出加换行,print只是输出但是不换行
-
假如还有59天放假,问:合xx个星期零xx天
public class ArithmeticOperatorExercise{ public static void main(String[] args){ //分析 //1.使用int变量 days 保存天数 //2.一个星期是7天,星期数: days / 7,零xx天 days % 7 //3.输出 int days = 59; int weeks = days / 7; int leftDays = days % 7; System.out.println(days + "天合" + weeks + "星期零" + leftDays + "天"); } }-
定义一个变量保存华氏温度,华氏温度转换摄氏温度的公式为: 5/9*(华氏温度-100),请求出华氏温度对应的摄氏温度。【234.5】
public class ArithmeticOperatorExercise{ public static void main(String[] args){ //分析 //1.使用double变量 d1 保存要求的华氏温度值234.5 //2.根据公式求摄氏温度: double d2 = 5/9*(d1 - 100) //3.输出 double fahrenheit = 234.5; double CentigradeTemperature = 5.0/9.0*(fahrenheit - 100); //注意一定要写成5.0和9.0 System.out.println("华氏温度" + fahrenheit + "对应的摄氏温度为:" + CentigradeTemperature); } }
-
注意:变量名尽量用英文,别用单个字母来表示
逻辑关系运算符-
短路与 &&,短路或 ||,取反 !
- &&短路与:如果第一个条件为false,则第二个条件不会判断,最终结果为false,效率高
- &逻辑与:不管第一个条件是什么,第二个条件都要判断,效率低
- 开发中,使用的基本上都是&&短路与,效率高
-
逻辑与 &,逻辑或 |,^逻辑异或
- || 短路或:如果第一个条件为false,则第二个条件不会判断,最终结果为false,效率高
- | 逻辑与:不管第一个条件是什么,第二个条件都要判断,效率低
- 开发中,使用的基本上都是 || 短路与,效率高
-
!取反,^逻辑异或
异或就说不相同为true,相同为false
+= , -= , *= , /= , %= 等
复合赋值运算符会进行类型转换
- a += b; [等价 a = a + b]
byte b = 3; b += 2; // 等价于 b = (byte)(b+2); b ++; // b = (byte)(b+1);三元运算符
-
基本语法
条件表达式?表达式1:表达式2;
- 如果条件表达式为true,运算后的结果是表达式1;
- 如果条件表达式为false,运算后的结果是表达式2;
使用细节:
- 表达式1和表达式2要为可以赋值给接受变量的类型
- 三元运算符可以转换成 if – else 语句
public class TernaryOperator{
public static void main(String[] args){
int a = 10;
int b = 99;
int result = a > b ? a++ : b--;
System.out.println(result);
//案例:实现三个数的最大值
int n1 = 55;
int n2 = 33;
int n3 = 123;
int max1 = n1 > n2 ? n1 : n2;
String max = max1 == n1 ? "n1" : "n2";
max1 = max1 > n3 ? max1 : n3;
max = max1 == n3 ? "n3" : max;
System.out.println("最大值是" + max + ":" + max1);
//使用一条语句来实现
max1 = (n1 > n2 ? n1 : n2) > n3 ? (n1 > n2 ? n1 : n2) : n3;
max = (max1 > n1 ? (max1 > n2 ? "n3" : "n2") : "n1");
System.out.println("=====================");
System.out.println("最大值是" + max + ":" + max1);
}
}
标识符的命名规则和规范
-
标识符:Java对各种变量、方法和类等命名时使用的字符序列
-
凡是自己可以起名字的地方都叫标识符
-
不可以使用关键字和保留字,数字不可以开头
-
包名:多单词组成时所有字母都小写:aaa.bbb.ccc
-
驼峰法:
类名、接口名:多单词组成,所有单词的首字母大写:XxxYyyZzz[大驼峰]
变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz[小驼峰]
编程中,需要接受用户输入的数据,就可以使用键盘输入语句来获取 Input.java,需要一个扫描器(对象),即Scanner
步骤:
- 导入该类的所在包,java.util.*
- 创建该类对象(声明变量)
- 调用里面的功能
import java.util.Scanner;
public class Input{
public static void main(String[] args) {
//演示接受用户的输入
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入名字");
String name = myScanner.next();//表示接受用户的输入
System.out.println("请输入年龄");
int age = myScanner.nextInt();//表示接受用户的输入
System.out.println("请输入薪水");
double salary = myScanner.nextDouble();//表示接受用户的输入
System.out.println("人的信息如下");
System.out.println("name=" + name + "age=" + age + "salary=" +salary);
}
}
原码、反码、补码
- 二进制的最高位是符号位,0表示正数,1表示负数
- 正数的原码、反码、补码都一样
- 负数的反码 = 它的原码符号位不变,其它位取反
- 负数的补码 = 它的反码+1,负数的反码 = 负数的补码 - 1
- 0的反码、补码都是0
- java的数都是有符号的
- 计算机运算的时候,都是以补码的方式来运算的
- 当我们看运算结果的时候,要看它的原码
按位与&、或|、异或^、取反~
- 算术右移 >> : 低位溢出,符号位不变,并用符号位补溢出的高位
- 1 >> 2 : 相当于 1/2/2,向右移几位就相当于➗几个2
- 算术左移 << : 符号位不变,低位补0
- 4 << 3 : 相当于4*2*2*2,向左移动几位就相当于×几个2
- >>> 逻辑右移也叫无符号右移: 低位溢出,高位补0
- 没有 <<< 这个符号
public class Input{
public static void main(String[] args){
System.out.println(~2);
}
}



