1.移位
>>左移 >>右移 >>>无符号右移
int a=3;
System.out.println(a<<1);//a=6 左移:就是乘以2的次幂运算,移几位就是几次幂
System.out.println(a>>1);//a=1 右移:就是除以2的次幂运算,移几位就是几次幂,右移时,原最高位是什么,空位就补什么
>>>无符号右移:无论原最高是什么,空位都补0
&运算:可用于获取二进制中的有效位1
6&3=2
即110 &011 ------>010----->2
|运算
6|3=7
即 110 | 011----->111------->7
异或运算^:一个数异或另一个数两次,结果还是这个数
6^3=5
即 110 ^ 011 ---->101------>110
~取反运算:
~6=-7
即 0110---取反----1110 +0001 ----->1111
一些小算法
public class MyJava {
public static void main(String[] args){
int a=3;
System.out.println(a<<1);
//最有效率运算2乘以8,通过位运算
System.out.println(2<<3);
// 通过第三方变量交换两个数据
int x=7,y=10,temp;
temp=x;
x=y;
y=x;
// 对连个整数变量的值进行变换(不需要第三方变量),通过和的形式
// 有个弊端,两个数据较大,可能会超出int范围
int c=3,d=4;
c=c+d;//c=3+4
d=c-d;//d=7-4=3
c=c-d;//c=7-3=4
// 对连个整数变量的值进行变换(不需要第三方变量),通过异或形式
c=c^d;//a=3^4
d=c^d;//b=3^4^4;
c=c^d;//c=3^4^3
}
}
三元运算符
public class MyJava {
public static void main(String[] args){
//三元运算符,格式:(条件表达式)?表达式1:表达式2
int x=1,y;
y=(x>3)?100:200;
System.out.println("y="+y);
}
}
判断结构:
if语句
// if格式1
int x=3;
if(x>3){
System.out.println(x);
}else{
System.out.println("wrong");
}
System.out.print(123);
// if格式2
/*if(条件表达式){
执行语句
}else{
执行语句
}*/
int a=3;
if(a>1){
System.out.println("yes");
}else{
System.out.println(false);
}
}
// if格式3
/*if(条件表达式){
执行语句
}else if{
执行语句
}else{
执行语句
}*/
// if格式4
/*if(条件表达式)
执行语句 只执行离if最近的一行
*/
}
switch语句
特点:
1、答案的书写没有顺序
2匹配的答案被执行,一直执行到break结束或者执行到switch语句结束
/*// switch语句
switch(表达式){
case 取值1:
执行语句;
break;
case 2 取值2:
执行语句;
break;
default:
执行语句:
break;
}*/
public static void main(String[] args){
// 需求:根据用户输入的数值,显示该数值对应的星期
/*步骤:
1、定义变量,记录数据
2、通过判断结构语句if,对该变量进行判断
3、根据不同的条件,通过输出语句显示不同的结果*/
int week=3;
if(week==1){
System.out.println("星期一");
}else if(week==2){
System.out.println("星期二");
}else if(week==3){
System.out.println("星期三");
}else if(week==4){
System.out.println("星期四");
}else if(week==5){
System.out.println("星期五");
}else if(week==6){
System.out.println("星期六");
}else if(week==7){
System.out.println("星期日");
}
/*// switch语句
switch(表达式){
case 取值1:
执行语句;
break;
case 2 取值2:
执行语句;
break;
default:
执行语句:
break;
}*/
int y=3;
switch(y){
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 7:
System.out.println("星期天");
break;
default:
break;
}
}
循环结构 while do while for
public class UsrInput {
public static void main(String[] args){
// 循环结构
int x=-1;
while(x<3){
System.out.println("x="+x);
x++;
}
// 需求:求1-10的和
// while
int a=1,sum=0;
while(a<=10){
sum+=a;
a++;
}
System.out.println("sum="+sum);
// do while
a=1;
do{
a++;
}while(a<4);
System.out.println("a="+a);
// for
sum=0;
for (a=1;a<=10;a++){
sum+=a;
}
System.out.println("sum="+sum);
}
public static void main(String[] args){
// 需求:获取1-100之间的6的倍数的个数
int a=1,sum=0;
while(a<100){
if(a%6==0){
sum++;
System.out.println("a="+a);
}
a++;
}
System.out.println("sum="+sum);
for(a=1;a<5;a++){
for(int j=0;j<4;j++){
System.out.print('*');
}
System.out.println();
}
// 方法1
int z=5;
for(int i=0;i<5;i++){
for(int j=0;j<z;j++){
System.out.print('*');
}
System.out.println();
z--;
}
// 方法2
for(int i=0;i<5;i++){
for(int j=i;j<5;j++){
System.out.print('*');
}
System.out.println();
}
for(int x=1;x<3;x++){
if(x==1)
break;
System.out.print("end");//不会输出
}
for(int x=1;x<4;x++){
if(x==2)
continue;//结束本次循环,继续下次循环
System.out.print("输出");//会输出
}
/*// 需求:根据用户给定的月份数据,显示该月份在哪个季节
步骤:1、定义变量
2定义if语句*/
int x=3;
switch(x){
case 1:
case 2:
case 3:
System.out.println("春天");
break;
case 4:
case 5:
case 6:
System.out.println("夏天");
break;
default:
System.out.println("冬天");
break;
}
// 需求:对给定的整数26,进行16进制的获取
// 1、16进制是数据的一种表现形式,,好处在于可以使表现形式更短
// 原理:将二进制中的4位为一个十六进制位
// 2、获取每4位,就是获取4位中的1,可以通过&位运算的方式完成的
// 3、想要获取下4四位,可以通过对元数据进行无符号右移的方式
// 步骤:
// 1、定义变量记录该整数
// 2、对该变量进行&运算,既然是获取四位,就&四个1,二进制四个1就是十进制的15
// 3、对元数据进行无符号右移四位
int num=26;
int n1=num & 15;
System.out.println("n1="+n1);
// 对num进行右移
num=num>>>4;
// 再进行 & 15
int n2=num & 15;
System.out.println("n=2"+n2);
for(int i=0;i<8;i++){
int n=num & 15;
if(n>9){
System.out.println((char)(n-10+'A'));
}else{
System.out.println(n);
}
num=num>>>4;
}
}