第十六讲
比较运算符,比较运算符返回的是布尔类型,要么是ture,要么是false
例如:3>2则是返回true
逻辑运算符有什么用?
用于连接两个boolean类型的表达式。
/*
比较运算符,运算完的结果必须是true或者false。
*/
// System.out.println(3>2);//true
// System.out.println(3==2);//false
// 2<x<5 x>2 x<5
/*
逻辑运算符有什么用?
用于连接两个boolean类型的表达式。
&:与
|:或
&:符号的运算特点:
true & true = true;
true & false = false;
false & true = false;
false & false = false;
&:运算规律:
&运算的两边只有有一个是false,结果肯定是false。
只有两边都为true,结果才是true。
|:运算特点:
true | true = true;
true | false = true;
false | true = true;
false | false = false;
|:运算规律:
|运算的两边只要有一个是true,结果肯定是true。
只有两边都为false。结果是false。
^:异或:和或有点不一样。
^:运算特点。
true ^ true = false;
true ^ false = true;
false ^ true = true;
false ^ false = false;
^异或的运算规律:
^符号的两边结果如果相同,结果是false。
两边的结果不同,结果是true。
!:非运算,判断事物的另一面。
!true = false
!false = true;
!!true = true;
面试题:
&&:
和&运算的结果是一样的。但是运算过程有点小区别。
&:无论左边的运算结果是什么,右边都参与运算。
&&:当左边为false时,右边不参与运算的。
||:
和|运算的结果是一样的。但是运算过程有点小区别。
|:无论左边的运算结果是什么,右边都参与运算。
||:当左边为true时,右边不参与运算的。
<<:相当于乘与2的倍数
>>:相当于除以2的倍数
移n位,就是对乘以或者除以2的n次幂。
技巧:二进制1就是true,0就是false。
位运算符:主要是用于二进制运算的符号
事例6&3结果:2
进行位运算要先转成二进制,一个整数32进制位吗
分析:其实是这样的
110
&011
----------------
010===2
异或的秒用:用于加解密用
6^3^3 = 6
一个数异或同一个数两次,结果还是这个数
<<:相当于乘与2的倍数
>>:相当于除以2的倍数
移n位,就是对乘以或者除以2的n次幂。
事例:
3<<2 = 12 3<<3 = 24 左移几位其实就是该数据乘以2的几次方,<<可以完成2的次幂运算
6>>1 = 3 6>>2 = 1 右移几位,其实就是该数据除以2的几次幂;>>对于高位出现的空位,原来的高位是什么就用什么补这个空位
>>> 被移位二进制最高位无论是0或者是1,空缺位都用0补。
位运算练习
.最有效率的方式算出2乘以8等于几?
你只要想运算高效那么首选就是位运算,直接操作二进制位,不做乘动作,发现8正好是2倍数,只要是涉及到2的倍数的,全都移位运算
2.对两个整数变量的值进行互换(不需要第三方变量)
对两个整数变量的值进行互换(不需要第三方变量)
int a = 3,b = 5;
System.out.println("a="+a+",b="+b);
/*
开发时,使用第三方变量的形式,因为阅读性强。
int c ;
c = a;
a = b;
b = c;
*/
//这种方式不要用,如果两个整数的数值过大,会超出int范围,会强制转换。数据会变化。
/*
a = a + b; //a = 3 + 5;a = 8;
b = a - b; //3+5-5 = 3;b = 3;
a = a - b; //3+5-3 = 5;a = 5;
*/
/*
面试的时候用。
a= a ^ b; //a = 3 ^ 5;
b= a ^ b; //b = (3^5)^5; b = 3;
a= a ^ b; //a = (3^5)^3; a = 5;
*/
System.out.println("a="+a+",b="+b);
异或的特点,如果一个数异或同一个数两次,还是原来的数,就是利用的这个特点
if的使用
简写格式什么时候用?
// 当ifelse运算后,有一个具体的结果时,可以简化写成三元运算符。
{//局部代码块可以定义局部变量的生命周期。
int a = 3;
//a 的运算。
System.out.println(a+4);
}
重要:
int x = 3;
if(x>1)
System.out.println("a");
else if(x>2)
System.out.println("b");
else if(x>3)
System.out.println("c");
else
System.out.println("d");
输出结果是a就只有a,因为if条件是执行一个,要执行下面的elseif必须是上面的if不满足才执行,满足了就不执行了
int y = 3;
if(y>1)
System.out.println("a1");
if(y>2)
System.out.println("b1");
if(y>3)
System.out.println("c1");
else
System.out.println("d1");
下面的输入结果又不同是a1,b1,d1
简单点来说,if条件句就类似于判断题,只有一个结果,switch就类似于选择题可以是多个,可以是多选也可以是单选
int x = 2;
switch(x)//byte,short,int,char.
{
default:
System.out.println("d");
//break;
case 4:
System.out.println("a");
//break;
case 1:
System.out.println("b");
break;
case 3:
System.out.println("c");
break;
}
结果d a b c
Swith是case与default之间没有顺序,但是也是执行却是有序,无论如何都是先执行第一个case
if和switch的应用:
if:
1,对具体的值进行判断。
2,对区间判断。
3,对运算结果是boolean类型的表达式进行判断。
switch:
1,对具体的值进行判断。
2,值的个数通常是固定的。
对于几个固定的值判断,建议使用switch语句,因为switch语句会将具体的答案都加载进内存。
效率相对高一点。
for练习&for和while的区别
/*
for和while的特点:
1,for和while可以互换。
2,格式上的不同,在使用上有点小区别。
如果需要通过变量来对循环进行控制,该变量只作为循环增量存在时,区别就体现出来了。
*/
//打印1~10十个数字
int x = 1;
while(x<5)
{
System.out.println("x="+x);
x++;
}
System.out.println("x===="+x);
for(int y=1; y<5; y++)
{
System.out.println("y="+y);
}
System.out.println("y====="+y);
//无限循环最简单的形式。
// while(true){}
// for(;;){}
什么时候使用循环结构呢?
当对某些代码执行很多次时,使用循环结构完成。
当对一个条件进行一次判断时,可以使用if语句。
当对一个条件进行多次判断时,可以使用while语句。
注意:
在使用循环时,一定要明确哪些语句需要参与循环,哪些不需要。
循环通常情况下,需要定义条件,需要控制次数。
While循环练习:
练习:
获取1到10 10个数字的和。
练习:
1~100之间 6的倍数出现的次数。
要求:自己独立完成思想的书写。和步骤的文字描述。
day03
学习结果:
1,逻辑运算符什么时候用?
2,&和&&有什么区别?
3,如何理解位运算符中 & 和 |,^,你认为什么时候会用到?
4,>> <<移位运算符的特点是什么?什么时候用?
5,三元运算符和if else语句的区别?使用场景?
6,if和switch和循环结构的应用场景。
7,switch语句都有哪些特点?
8,for和while的区别。
9,局部代码块有什么用?什么时候用?
class Test
{
publicstatic void main(String[] args)
{
/*
3000米长的绳子,每天减一半,问,需要多少天,绳子会小于5米?
思路:
1,绳子长度在变化,定义变量记录绳子长度的变化,而且这个变量的初始化值时3000.
既然不考虑小数部分,所以可以定义int类型变量
2,多少天,不确定,是一个变量.
3,每天减一半,这时对绳子长度的运算,只要可以减一半,就算一天。
这就让我想到了一个小思想,就是传说中的计数器思想。
4,天数的递增,减一半的动作在重复的执行,使用循环结构。
5,直到小于5米,重复动作结束。这就是循环的条件。
*/
int day = 0;
for(int x=3000;x>=5; x = x/2)
{
day++;
}
System.out.println("day="+day);
System.out.println("HelloWorld!");
//将这个运算过程画出来。你从这个代码运算规律中发现了什么?总结了什么思想?
for(int x=0; x<3; x++)
{
for(inty=0; y<5; y++)
{
System.out.print("*");
}
System.out.println();
}
}
}