不使用第三个变量,将a,b两个变量的值进行交换
a=10(1010)
b=11(1011)
a=a^b; a=0001 b=1011
b=a^b; a=0001 b=1010
a=a^b; a=1011 b=1010
特例:两个相同的数的异或结果为0
eg:a=10, b=10, a^b=0
(二进制运算)
<<
:左移
>>
:带符号右移,算术右移
>>>
:无符号右移,逻辑右移
例1:
int a = 12;
内存中的保存形式为:
00000000 00000000 00000000 00001100
12>>2
舍掉低位,在高位上补符号位,整数补0,负数补1
12>>2=3
例2:
int i = -12;
-12>>2
内存中保存的形式为:
原码
00000000 00000000 00000000 00001100
取反
11111111 11111111 11111111 11110011
加1
11111111 11111111 11111111 11110100
右移两位>>2
11111111 11111111 11111111 11111101
-1
11111111 11111111 11111111 11111100
取反
00000000 00000000 00000000 00000011
=3→-3
>>>
舍掉低位,在高位补0
例1:
Int i = -12;
内存中保存的
原码
00000000 00000000 00000000 00001100
取反
11111111 11111111 11111111 11110011
加1
11111111 11111111 11111111 11110100
不带符号右移两位>>>2
00111111 11111111 11111111 11111101
=1073741821
<<
舍掉高位,在低位上直接补0,相当于原数乘以对应2的位数次方
1.遇到移位操作符,首先将数字转换为二进制的表示形式(补码)
2.在考虑左移还是右移
3.再考虑补0还是补1
两侧都为布尔表达式,返回值为布尔,一般用来判断
&&:(短路运算符)
false && false ==>false
false && true==>false
true && true==>true
||:
false || false ==>false
false || true==>true
true || true==>true
布尔表达式:?True的结果:false的结果
例:
int score = 65;
String result = Score>=60 ? “及格”:”不及格”;
输出 result,结果是及格或不及格.
Java.util.Scanner
因为是一个引用类型。使用前需要new对象
Scanner sc = new Scanner(System.in);
使用对象sc
获取到下一个int:nextInt();
获取到下一个long :nextLong();
获取下一个字符串:next();
Tips:String[] args
等同于String... args
在使用java命令的时候,空格,接要输入的参数,多个参数之间用空格隔开,可以装进args中,但是是String类型的参数,需要按照要求做类型转换
++和–
int i = 10;
int a = i++; //a = 10 , i =11 ==>a = i ; i = i + 1;
int b = ++i;//b= 12 ,i =12==> i = i + 1 ;b = i;
自减同理
If(判断条件){
结果为true的操作
}else{
结果为false的操作
}
if(判断条件1){
}else if(判断条件2){
}else if(判断条件3){
}else{
}
判断条件互斥
If语句可以嵌套使用
If(){
If(){
If(){
}
}
}
if…else…实例:
//需求:输入一个0-100以内的数字
//判断该数字作为成绩是否及格,如果及格的话等级为什么?
//95-100sss
//85-95ss
//75-85s
//60-75a
import java.util.Scanner;
public class Ifelse{
public static void main (String[] args){
//第一步:先获得输入的数
Scanner sc = new Scanner(System.in);
int data = sc.nextInt();
//第二步:判断data是否合格
if(data>=60 && data<=100){
System.out.println("你的成绩及格,被评为");
//第三步:对及格的成绩进行评级
if(data>95){
System.out.println("SSS");
//return;//方法中遇到return则方法立即结束
}
if(data>85 && data<=95){
System.out.println("SS");
}
if(data>75 && data<=85){
System.out.println("S");
}
if(data<=75){
System.out.println("A");
}
}else if(data<60 && data>=0){
System.out.println("你的成绩不及格,下次继续努力");
}else{
//<0或者>100都会进入
System.out.println("请输入正确的成绩格式!");
}
}
}
Switch(变量){
case 值1:
表达式1;
break;
case 值2:
表达式2;
break;
case 值3:
表达式3;
break;
default:
//代表以上取值之外的所有情况
表达式
break;
}
switch…case…实例:
/*
*需求:输入1-7的整形数字,得到相应的日期数
*eg:输入7,输出星期日
*/
import java.util.Scanner;
public class SwitchTest{
public static void main (String[] args){
//第一步:获得输入的数字
Scanner sc = new Scanner(System.in);
int data = sc.nextInt();
//第二步:用switch判断data的各个取值
switch (data){
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期日");
break;
default:
System.out.println("输入格式有误,请重新输入!");
break;
}
}
}
要素:变量初始化,循环条件(布尔类型的表达式),迭代(循环的次数),循环体(重复执行的代码)
for(初始化;循环条件;迭代){
循环体
}
for循环实例:
//需求:计算1+2+3+...+99+100
public class ForTest{
public static void main(String[] args){
int sum = 0;
for(int i=1;i<=100;i++){
//sum = sum + i;
sum += i;
}
System.out.println(sum);
}
}
for循环可以控制循环的次数
初始化
While(判断条件){
循环体
迭代
}
初始化
Do{
循环体
迭代
}while(循环条件);
do…while…实例:
//循环不断的生成[0,9]随机数,直到生成随机数为5的时候,那么就停止这个循环.
import java.util.Random;
public class Rand{
public static void main(String[] args){
//生成一个随机数
Random num = new Random();
int a ;
do{
//定义随机数的取值范围是[0-9]
a = num.nextInt(10);
System.out.println(a);
}while(a<5 || a>5);
}
}
public class Biao{
public static void main(String[] args){
//i是行,j是列
for(int i=1;i<=9;i++){
for(int j=1;j<=i;j++){
int k = i * j;
System.out.print(j+"*"+i+"="+k+" ");
}
System.out.println();
}
}
}
今天早上先是回头去研究创建一个类和方法,总算是比较透彻的理解了之间的关系.同时,今天也从linux虚拟机转战到了windows中去编写java程序.个人感觉还是windows中写代码比较舒服,就是GBK编码的错误让我很头疼,一直得用UTF-8去进行编译,暂时也没有找到比较好的解决办法.今天主要内容都不是很难,运算符理解起来还是比较容易的.流程控制方面我感觉就得多敲代码,然后仔细理清逻辑关系,学起来也没有很吃力,下来仅练习了几个程序,就可以理清逻辑关系了.明天加油!~