写在前面:
视频是什么东西,有看文档精彩吗?
视频是什么东西,有看文档速度快吗?
视频是什么东西,有看文档效率高吗?
十分钟后,两人重新来到了书房。
诸小亮:“咱们继续上课,首先来认识一下 表达式”
张小飞:“a 不应该是标识符吗?怎么又成表达式了”
“一样的意思,只是叫法不同而已,这样定义后,只要提到 a,我们就明白它代表的是 2 ”
“我明白了,这相当于给数字 2 起了个绰号”
“可以这样认为,但并不是很准确,因为下面的也是表达式:”
public static void main(String[] args){
int a = 2;
//数字3的表示方式有很多种,比如:
a + 1;// a+1 可以表示 3 ,所以 a+3 也是表达式
1 + 2;// 1+2 也可以表示 3,所以它也是表达式
}
诸小亮“总之:只要能表示某个数据的代码,都是表达式”
张小飞:“明白”
诸小亮:“接着,我们说说 Java 中的运算符,毕竟计算机嘛,就是帮助人类做计算的”
张小飞:“不就是 加减乘除 嘛,这有什么说的”
“这你就不懂了,加减乘除只是最基本的,Java 中还有其他一些运算符,比如: %、++、-- 等,另外 Java 中的除法,跟我们平常中的除法也有点儿区别?”
“哦?这我倒是想见识一下,哪里不一样”
“不要着急,Java中的运算符分为好几种,我们一个一个说”
诸小亮:“咱们先看 算数运算符,其实就是: + 、-、*、/
public static void main (String [] args) {
int a = 1 + 2;
int b = a - 2;
int c = b * 3;
int d = c / 3;
}
“由于代码太简单,结果我就不输出了,给你 2 分钟,你自己看看吧”
“师兄,您接着说吧,这么简单的东西,都不值得我动手”张小飞信心十足的说到
“好吧,上面的确实太简单,不过需要注意一点:除法运算,看下面代码:”
结果:
“这是什么情况,不应该输出 2.5 吗?”张小飞问到
“2.5 是数学上的结果,Java 中,整数之间做除法,结果中的小数部分会被舍弃”
张小飞:“但是这样的结果不正确啊,怎么能够保留小数部分呢?”
诸小亮:“如果想保留小数部分,那么就只能:”
结果:
“哦,明白了,我自己来试试”
“师兄,我好奇尝试一下把除数弄成 0,怎么会这样子?”
“这表示程序出问题了,不过我们还没讲到这里,之后再说”
“好的,好的”
张小飞:“这个 取模运算 是什么意思?”
诸小亮:“其实就是两个数相除,获取余数,比如:”
结果:
张小飞:“这个有点儿意思,我来试试”
“师兄,我用正数测试是没问题的,但是用负数的话。。。,结果:”
诸小亮:“这正是我要给你说的第二点:如果除数是负数,负号可以忽略不计”
张小飞:“那,如果被除数是负数呢?我再来试试”
张小飞:“原来如此,如果被除数是负数,就不能忽略负号了”
诸小亮:“还有一种比较特殊的取模:被除数 比 除数 小,比如:”
张小飞:“这个怎么解释?”
诸小亮:“1 % 5,商是0,余数是1”
“哦...,明白了”
“还有一点需要记住:取模运算的结果,必然比除数小”
“这是当然,余数嘛,肯定比除数小”
诸小亮:“++运算符,表示自己加 1,比如:”
上图中:a++ 相当于 a = a+1,结果:
张小飞:“。。。。,我还以为是很高深的东西呢,就这?”
“你想多了,不过下面的就有些难度,比如:前置运算”
“哦?什么是前置运算?”张小飞兴致勃勃的问到
“把 ++ 放到变量的前面,这就叫:前置运算,比如:”
“。。。。。。,你真无聊”
“哈哈,开个玩笑,下面的才真正能有难度,仔细看好:”
“师兄,感觉还需要您解释一下”
“没问题,其实上面代码的运算逻辑,实际是:”
“明白,不过这也不难啊”
“稍等,让我变形一下”
“这...,怎么会这样呢?”张小飞疑惑道
“++ 放到变量后面,情况就不同了,这叫:后置运算,它的运算逻辑是这样的:”
“原来如此,我明白了”张小飞说道
诸小亮:“--运算符,就是自己减 1,跟 ++ 类似,我就不介绍了,给你 5 分钟,自己玩玩吧”
张小飞:“好的”
五分钟后。
诸小亮:“接下来是 赋值运算”
张小飞:“师兄,赋值不就是 = 号吗,这还要单独讲?”
“赋值运算符也有好几个,= 只是其中一个,还有:+=, -=, *=, /=, %=,你看看下面代码:”
public static void main(String[] args){
int a = 2;
a += 3;//相当于 a = a + 3;
a -= 1;//相当于 a = a - 3;
a *= 2;//相当于 a = a * 3;
a /= 2;//相当于 a = a / 3;
a %= 5;//相当于 a = a % 3;
}
“原来还可以这样使用,我明白了”
“不过,需要明白,a += 3 跟 a = a + 3 还是有区别的,比如:”
“这是不是写错了,这个代码编译会报错,s+3 是一个 int 类型的值,无法赋值给 s ”
“你说的没错,但是改一下的话:”
“这时候就可以编译成功了,而且正常输出”
张小飞疑惑道:“这是为什么呢?”
“原因很简单:+= 是赋值运算符,如果两边的类型不一样时会自动向低转化,所以。。。。。”
“明白”
诸小亮:“比较运算符也有好几个:==、!=、>、>=、<、<=”
张小飞:“这个我知道,数学上也经常使用”
“没错,不过在 Java 中,比较运算符的结果都是 boolean 型,要么是true,要么是false,比如:”
public static void main(String[] args){
boolean bool = 4 == 3;
System.out.println(bool);
System.out.println(4 != 3);
System.out.println(4 > 3);
System.out.println(4 >= 3);
System.out.println(4 < 3);
System.out.println(4 <= 3);
}
结果:
“这个比较简单,也没什么特殊的地方,看看就行”
“好的”
诸小亮:“逻辑运算符,这个就复杂一些了”
张小飞:“师兄,你上面就说有难度,最后也没发现难在哪儿了,别再忽悠了”
“咳咳,我说有难度了吗,我说的是:它稍微复杂一些”诸小亮反驳道
“好好,是我听错了,您接着说”
“逻辑运算符,有 3 个:&&(且)、||(或)、!(非),咱们一个个解释”
诸小亮:“第一个:&&(且)”
示例:
结果:
张小飞:“还得用 && 连起来,a
“不行,Java 中确实不允许a
“好吧”
“另外,还需要注意:使用 && 时,只要第一个表达式的值是false,那么整体就是false”
“这个,可以证明一下吗?”
“当然可以,修改一下代码:”
张小飞:“原来如此, 如果 a / 0 执行的话,就会报错了”
诸小亮:“第二个:||(或)”
示例:
结果:
“这等于跟 && 刚好相反嘛”张小飞说到
“是的,不过:如果第一个表达式结果为true,整体结果就为true,不用再执行第二个表达式”
“明白,跟 && 很类似”
诸小亮:“第三个:!(非),这个更简单”
示例:
结果:
诸小亮:“师弟,下面我们讲位运算,这个是真有难度”
张小飞:“。。。。。”
“你不信?好,我们来看看,位运算:直接数据对二进制进行运算”
“二进制运算?什么意思?”
诸小亮:“<<:左移,一个数左移 N 位,相当于乘以 2 的 N 次方”
示例:
结果:
张小飞:“这个二进制又有什么关系呢?”
“很简单,我们先看数字 1 的二进制:”
“左移 1 位,就是把所有二进制向左边移动一个位置,结果:”
“这样,左边做高位的 0 就会超出 int 的边界,也就舍弃掉了,不过最右边也会出现一个空位,这时进行补 0 操作,最后结果:”
张小飞:“原来是这样,我明白了”
诸小亮:“然后是 >> (右移)”
张小飞:“明白,右移跟左移刚好相反”
“是的,不过在右移后,左边会出现空位,这时:”
“师兄,不对啊,为什么我这个右移后结果是0呢?”
诸小亮微微一笑:“我们再来回忆一下,1 的二进制”
“右移 1 位的结果:”
因为是正数,所以左侧补 0 ,最终结果:
张小飞:“原来如此,懂了懂了”
张小飞:“师兄,>>> 这个也是右移?”
诸小亮:“是的,这个右移。。。”
“是不是右移 N 位,就相当于除以 3 的 N 次方? ”张小飞抢答道
“。。。。,不是的,它的含义是:>>>:无符号右移,不管是正数、负数,右移后,左边统统补0”
“师弟,这个我就不详细介绍了,你自己玩吧”
诸小亮:“接下来是 & (按位与)运算”
张小飞:“这不是 ‘且’ 吗,怎么又叫 ‘按位与’ 了?”
“。。。,你仔细看清楚,且是 ‘&&’,这里是 ‘&’”
“哦哦,不好意思,看错了,那这个具体是什么意思?”
“也是对二进制做运算,规则是:相同位置都是1,那么结果就为1,否则为0”
示例:
结果:
“这个,嗯。。。,还得麻烦您解释一下”张小飞说到
“怎么样,不是那么简单吧,给你个图,先看看”
“明白了,关键就在于:相同位置都是1,那么结果就为1,否则为0”
诸小亮:“师弟,这个要看清楚了,是 ‘|(按位或)’,可不是 ‘||’”
张小飞:“。。。,好啦好啦,这次看清了,赶紧说说是什么意思吧”
“对二进制做 或 运算,规则:相同位置均为0,那么结果就为0,否则为1”
示例:
结果:
“师弟,这个你能单独画张图,解释一下吗?”
“没问题,看我的”
“嗯嗯,没错没错,看来你已经掌握精髓了”
“那,必须的”
诸小亮:“最后一个:^(异或),规则:相同位置的值不同,那么结果就为1,否则为0”
示例:
结果:
“师兄,这个还交给我,你看看”
“完全正确,简直不要太棒”诸小亮赞扬到
“过奖,过奖”
“下面给你说一个场景,使用 ^ 很方便,面试也有人问”
“哦?什么场景?”张小飞一下来了兴致
“比如:交换两个变量的值,你觉得应该怎么做?”
“这太简单了,代码应该是:”
public static void main (String [] args) {
int a = 2;
int b = 3;
//交换 a 和 b 的值
int temp = a;
a = b;
b = temp;
System.out.println(a + "," +b);
}
结果:
“嗯,没错,你这样确实能实现,但是使用 ^ 会更加简单,比如:”
结果:
“这就交换成功了?不是吧”
“没错,这就是 ^ 的强大之处,你根据之前的知识,好好研究一下吧,给你个提示:”
“好的,好的,我这就看看”
诸小亮:“来,还剩下最有一个运算符:三元运算符”
张小飞:“这又是什么东西?”
“非常简单,格式:(条件表达式) ? 结果1:结果2;”
“嗯....,不懂”张小飞摇摇头
“没关系,看一段代码你就明白了”
public static void main (String [] args) {
int a = 2;
int b = 3;
//三元运算:如果 a
结果:
“师兄,我是这样理解的:如果条件表达式的结果为 ture,那么就取 结果1,否则取 结果2”
“没错,是这样的,那么关于运算符就这么多了,需要练习一会儿吗?”
“当然了,这个东西还是挺多了”
页面更新:2024-04-12
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号