int b=2;
System.out.println( a++); 1
System.out.println( ++a); 3
那么System.out.println(++b+b++);结果会是几呢? 答案是6这里涉及到了运算优先级的问题。
//–同理
二、赋值运算符=
//扩展赋值运算符
int c=1;
c=c+1;等同c=c+1;
涉及到类型转换
下面出道面试题:
byte b=10;
b=b+1;
System.out.println(b);
会报错?
答案:是肯定会的,主要是因为其中1默认的是int类型数据
但是b是byte类型,在进行运算d+1的时候,会整体转换为int型,而结果确是需要把int类型转换为byte类型,需要进行强制转换,高类型向低类型时候会损失精度,而低类型向高类型转换会自动进行转换。
可以换一种写法
例如:
b+=1;
System.out.println(b); 这个时候就不会进行报错了。
所以建议选择第二种运算方式。
三、关系运算符
、<、>=、<=、==、!=
用于表示两个值的关系
System.out.println(1!=2); 返回值只有boolean类型即true、false两种情况,在面向对象的时候会有其他情况出现。
四、逻辑运算符
&&、||、!
逻辑运算符的两边一般是表达式,而不是具体的值
例如:
&&:且
System.out.println(3>5 && 3<4); FALSE 左边只要是错误直接跳出
System.out.println(3>5 & 3<4); FALSE 两边都会参与运算
|| :或
System.out.println(3>5 || 3<4); TRUE 左边不正确才,会进行右边运算
System.out.println(3>5 | 3<4); TRUE 两边都会参与运算
!:取反
System.out.println(!(3>5 || 3<4));FALSE
五、位运算符:只能操作数值,操作的时候会转化成二进制进行运算
System.out.println(4 & 5); 值为4 例如 4是 100 5是101
都为1才为1 所以运算结果是
100 =1_22+0*21+0_2^0=4
System.out.println(4 | 5); 值为 5
100 101 有一个1就为1 ,所以二进制数表示为101所以值是5
System.out.println(4 ^ 5); 值为1
100 101 位数为10或01才计数 所以二进制数表示为001,所以值为1
System.out.println(~4) 值为-5
4的二进制位是:
0000 0000 0000 0000 0000 0000 0000 0100 =2^(3-1)=4(10)
按位取反:
1111 1111 1111 1111 1111 1111 1111 1011 =
-231+230…0*22+21+1=-5
我们很容易推导出来2^31=后面所有值+1
例如 1111 2(4-1)=2(3-1)+2(2-1)+2(1-1)+1=4+2+1+1=8
所以说4按位取反后相比取 后的值是差了 2^(3-1)+1=5 所以最后值是-5
最后形成一个这样的公式即使x+X+1=0其中X是x按位取反后的值例如:
1011=-8+2+1=-5
0100=4
4+(-5)+1=0
计算机程序对正数和负数都要进行计算,所以需要一种方法来区分正数和负数。显而易见的解决方案
是增加一个独立的符号位,这种表示方法称为符号和幅值表示法。
但是该种方法有很多去电,符号位放在那里?是放在左边还是放在右边,其次是运算的时候不能提前知道运算结果是正的还是负的,而且对于该种方法的计算,在计算的时候还需要额外的一步来设置符号,最后一个单独的符号位意味着在该种表示方法中还可能存在正0和负0,所以最后这种方法被摒弃了。
正菜:
在研究更具吸引力的替代方案时产生了这样一个问题,当我们试图用一个较小的数减去一个较大的数的时候,无无符号数表示方法的结果将会是什么?答案是较小的数字将会从前面的0中借位,所有的结果中前面的位都变成了一串1。
在没有其他更明显的更好选择的情况下,最终的解决方案是选择一种易于硬件实现的表达方式:
前导位为0表示正数,前导位为1表示负数。这种常用的表示有符号二进制数的方法称为二进制补码:
这种二进制补码虽然说会给粗心的程序猿带来烦恼,但相比符号和幅值方法,该方法不会对程序猿和
硬件造成困扰。因此现在所有的计算机都采用的是二进制补码方法来表示有符号数。
例如:
0000 0000 0000 0000 0000 0000 0000 0000 =0(10)
0000 0000 0000 0000 0000 0000 0000 0001 =1(10)
0000 0000 0000 0000 0000 0000 0000 0010 =2(10)
…
0111 1111 1111 1111 1111 1111 1111 1101 =2,147,483,645(10)
0111 1111 1111 1111 1111 1111 1111 1110 =2,147,483,646(10)
0111 1111 1111 1111 1111 1111 1111 1111 =2,147,483,647(10)
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
那么如何才能正确的掌握Redis呢?
为了让大家能够在Redis上能够加深,所以这次给大家准备了一些Redis的学习资料,还有一些大厂的面试题,包括以下这些面试题
-
并发编程面试题汇总
-
JVM面试题汇总
-
Netty常被问到的那些面试题汇总
-
Tomcat面试题整理汇总
-
Mysql面试题汇总
-
Spring源码深度解析
-
Mybatis常见面试题汇总
-
Nginx那些面试题汇总
-
Zookeeper面试题汇总
-
RabbitMQ常见面试题汇总
JVM常频面试:
Mysql面试题汇总(一)
Mysql面试题汇总(二)
Redis常见面试题汇总(300+题)
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
图片转存中…(img-iynv3FTx-1713341985040)]
Redis常见面试题汇总(300+题)
[外链图片转存中…(img-8LD8WAl5-1713341985040)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!