引言
- 在记录自己自学java过程中,首先声明关于学习顺序可能并不很科学,即使我也是通过一些公开的资料来进行学习,但不会是完全无基础的教学,更像是比对着python(本人平时编程使用的是python)比较实现方法的异同学习,请酌情参考学习,有理解不对的地方欢迎指正。
java基础 - 4
java的位移运算
- 感觉目前写python代码时候还未遇到该场景,遇到后补充
位运算
- 位运算是按位进行与、或、非和异或的运算(有点像T和F,但是又不一样,蛮神奇的)
- 与规则是,必须两个数同时为1,结果才为1:(同时成立and)
n = 0 & 0
n = 0 & 1
n = 1 & 0
n = 1 & 1
- 或运算的规则是,只要任意一个为1,结果就为1:或运算的规则是,只要任意一个为1,结果就为1:(or)
n = 0 | 0
n = 0 | 1
- 非运算的规则是,0和1互换:(有点像取对的感觉,在python中没怎么用过这个情况)
n = ~0
n = ~1
- 异或运算的规则是,如果两个数不同,结果为1,否则为0:(和与规则还不一样)
n = 0 ^ 0
n = 0 ^ 1
n = 1 ^ 0
n = 1 ^ 1
- 但是位远算不只是用于0和1,容易误解成T和F,也可以用于整数计算,实际上就是按位对齐,然后依次对每一位进行运算,如下图0和100的位运算,结果是0,目前还未发现这个用法用于干嘛,后续待补充

运算优先级
- 在Java的计算表达式中,运算优先级从高到低依次是:(反正提高优先级就加括号就完了)
- ()
- ! ~ ++ --
-
-
- << >> >>>
- &
- |
- += -= *= /=
类型自动提升与强制转型
- 由于java中变量或者常量类型需要定义的比较详细,所以在运算过程中,如果参与运算的两个数类型不一致,那么计算结果为较大类型的整型。例如,short和int计算,结果总是int,自动提升也很好理解,取大范围的不容易出错
- 也可以将结果强制转型,即将大范围的整数转型为小范围的整数。强制转型使用(类型),例如,将int强制转型为short:
int i = 12345
short s = (short) i
- 注意强制转型要符合规则,超出范围就会得到错误的结果