运算符
一.运算符:
算数运算符
+ - * / %
++ 前加加: 先加1 ,后运算 后加加:先运算后加1
比如a=5 b=a++ 是后加加 先运算 b=a 此时a是5 b=5
后加1 a+=1 a=6
c=2 d=++c 是前加加 先加1 c+=1 c=3
后运算 d=c 此时c为3 d=3
--
赋值运算符
= += -= *= /= %=
包含了一个强制类型转换 //尽量用这种方式
short s = 1;
s+=1; //包含强制类型转换,所以不报错
s=s+1; //报错
关系运算符:
返回结果是布尔类型的值 //区分 == 与=的不同 ==返回boolean类型 true或false =是赋值语句
== != >= <= > <
instanceof 用于引用数据类型 "hell" instanceof String
逻辑运算符
&: 两个都是true结果才是true
|: 只要有一个是true结果就是true
^:相同为false不同为true
!:非
&&: 前面是false ,后面则不再进行运算
int a =3;
int b = 4;
System.out.println(a-- > 4 && b++ > a) // false 由于a-->4为false 故后面的不执行
System.out.println(a) //2
System.out.println(b) //4 //此时b++不执行
int a =3;
int b = 4
System.out.println(a-- >4 & b++>a ) // false 不论前面结果怎样,后面都执行
System.out.println(a) // 2
System.out.println(b) // 5 b++执行
||: 前面是true,则后面不执行 类比于上
& | ^ ~ 连接数字,先转成二进制补码,逐位运算,把1当成true,把0当成false
按照byte类型作为演示
22&(-3) //20
22的原码为0001 0110 补码为其本身 0001 0110
-3的原码为1000 0011 反码为1111 1100 补码为1111 1101
0001 0110
& 1111 1101 //0为false 1为true &都为true才是true
0001 0100 这是补码 求其原码 还是自身(起始符号位为0 正数) 结果为20
22|(-3) //-1
0001 0110
| 1111 1101 //0为false 1为true |都是false才是false
1111 1111 这是补码 求其原码为1000 0001结果为-1
22^(-3) //-21
0001 0110
^ 1111 1101 //0为false 1为true //相同为false不同为true
1110 1011 这是补码 求其原码为1001 0101结果为-21
~取反
~20 //-21
20的补码为0001 0100
~所有位取反 得到1110 1011 此时为补码 求其原码 1001 0101 为-21
位运算符
<<: 空位补0,最高位丢弃
>>: 空位补最高位
>>>:空位补0
左移几位相当于乘以2的几次方
右移几位相当于除以2的几次方
之前演示过计算机底层加法的运算,位运算符运算其实是计算机底层乘法和除法的运算过程,只需要二进制数左移右移即可,换算成加法运算;
比如 24*17 17可以改为(16+1) 可以改成24*16+24 *16表示左移4位 (24<<4)+24
除法由于涉及到小数,原理我不太清楚,有兴趣自行搜索
三目运算符
a>b?a:b;
二. 键盘录入
import java.util.Scanner;(放到class 上面)
Scanenr sc = new Scanner(System.in);
int a = sc.nextInt();
String b = sc.nextLine();//最好不用这个 他识别换行回车 如果用的话最好放在第一个
String c = sc.next(); //最好用这个接收字符串类型,
三. eclispe的使用
改编码!!!!!! utf-8
一些快捷键
alt+/ 补全
ctrl+2 后再按L
ctrl+shift+o 导包
ctrl+shift+F 整理格式
shift + enter 换行
ctrl+/ 单行注释 再按一次取消单行注释
ctrl+shift+/ 多行注释(需要选中多行)
ctrl+shift+\ 取消多行注释
alt+上箭头 / 下箭头 上下移动代码
alt+shift+下箭头 复制一行代码
练习题
int a = 15;
int b = 2;
double c = 2;
System.out.println(a + "/" + b + "=" + (a / b)); // a/b= 7
System.out.println(a + "%"+ b + "=" + (a % b)); //a%b=1
System.out.println(a + "/" + c + "=" + (a / c)); //a/c=7.5 有小数就不会取整
System.out.println(a + "%" + c + "=" + (a % c)); //a%c=1.0 余数变为小数
int a2 = 10;
System.out.println(a2++); //10 a2=11
System.out.println(a2); //11
int x = 10;
int a1 = x+ x++; // 10+10 x=11
System.out.println("a1 =" + a1); //20
System.out.println("x =" + x);// 11
int b1 = x + ++x; //11+12 x=12
System.out.println("b1 =" + b1); //23
System.out.println("x =" + x); //x=12
int c1 = x + x--; //12+12 x=11
System.out.println("c =" + c1); //24
System.out.println("x =" + x); // 11
int d1 = x + --x; //11+10 x=10
System.out.println("d1 =" + d1); //21
System.out.println("x =" + x); //10
int a3 = 15;
int b3 = 2;
int x3 = a3 & b3;
int y3 = a3 | b3;
int z3 = a3 ^ b3;
System.out.println(a3 + "&" + b3 + "=" + x3);
System.out.println(a3 + "|" + b3 + "=" + y3);
System.out.println(a3 + "^" + b3 + "=" + z3);
/*15的二进制为 0000 0000 0000 0000 0000 0000 0000 1111 补码相同
2的二进制位 0000 0000 0000 0000 0000 0000 0000 0010 补码相同
15&2 = 0000 0000 0000 0000 0000 0000 0000 0010 这是补码 原码相同 为2
& 都为1才为1 其余为0
15|2 = 0000 0000 0000 0000 0000 0000 0000 1111 这是补码 原码相同 为15
| 只要有1就为1 其余为0
15^2 = 0000 0000 0000 0000 0000 0000 0000 1101 这是补码 原码相同 为 13
^ 不同为1 相同为0 */
int x4 ;
double y4;
x4 = (int)22.5 + (int)34.7; //22+34=56
y4 = (double)x4; //56.0
System.out.println("x4 = " + x4);
System.out.println("y = " + y4);
int i = 5;
int j = 5;
int m = 5;
int n = 5;
i++; //i=6
j = j + 1; //j=6
m--;//m=4
n = n - 1;//n=4
System.out.println(i); // 6 i=6
System.out.println(i++); // 6 i=7
System.out.println(++i); // 8 i=8
System.out.println(i--); //8 i=7
System.out.println();
System.out.println(j); //6 j=6
System.out.println(j++); // 6 j=7
System.out.println(j--); // 7 j=6
System.out.println(--j); //5 j=5
System.out.println();
System.out.println(m); //4 m=4
System.out.println(n); // 4 n=4
int i7 = 0;
int j7 = 0;
System.out.println(i7); //0
System.out.println(j7); //0
i7++; //0 i7=1
++j7; //1 j7=1
System.out.println(i7); //1 i7=1
System.out.println(j7); //1 j7=1
System.out.println("--------------------------");
System.out.println(i7++); //1 i7=2
System.out.println(++j7); //2 j7=2
System.out.println("===========================");
System.out.println(i7);//2
System.out.println(j7);//2
int you = 56;
String str = (you < 50) ? "hello":(you > 60) ? "1987":"1988";
System.out.println(str); //1988
int numx = 4;
int b = (numx++)+(++numx)+(numx*10); //4+6+60=70
//numx++ 4 numx=5
//++numx 6 numx=6
//numx*10 60
- 计算6+5%3+2的值是 10 // 先算5%3=2 再算6+2+2 =10
- 下面的逻辑表达式中合法的是___C_______ //逻辑表达式连接的是boolean类型
A. (7+8)&&(9-5) B. (95)||(97) C. 9>6&&8<10 D. (9%4)&&(8*3) - 2|3&5的值是 C // 先算& 再算| 3&5=1 2|1=3
A. 1 B. 2 C. 3 D. 5 - 以下选项中,合法的赋值语句是(B )。
A. a = = 1; B.++ i; C.a=a + 1= 5; D. y = int ( i ); - 写出四种不同的Java语句,实现对整型变量x加1 //x++ ; ++x; x+=1 x=x+1(x为int类型);
学生成绩结果查询系统
利用三目运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,80-89分之间的用B表示,70-79分以下的用C表示, 60-69分以下的用D表示,60以下用E。
package Test;
import java.util.Scanner;
/**
*学习成绩>=90分的同学用A表示,
* 80-89分之间的用B表示,
* 70-79分以下的用C表示,
* 60-69分以下的用D表示,
* 60以下用E.
*/
public class Tesst1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("输入学生成绩,0-100之间");
double score = input.nextDouble();
String level = score>=90?"A":score>=80?"B":score>=70?"C":score>=60?"D":"E";
System.out.println("成绩为"+score+"的等级为"+level);
}
}
从键盘输入两个整数,分别输出这两个数的和,差、积、商
import java.util.Scanner;
/**
*从键盘输入两个整数,分别输出这两个数的和,差、积、商
*/
public class Tesst1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("输入第一个整数");
int a = input.nextInt();
System.out.println("输入第二个整数");
int b = input.nextInt();
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println(a/b);
}
}