算数运算符的使用(演示)
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 + ""