以下为 Jean 学习笔记和习题整理,供学习和参考
# 运算符
# 位运算符
位运算是以二进制位为单位进行的运算,其操作数和运算结果都是整型值。
位运算符: | ||||
---|---|---|---|---|
与 & | 0&0=0 | 0&1=0 | 1&0=0 | 1&1=1 |
或 | | 0\0=0 | 0\1=1 | 1\0=1 | 1\1=1 |
异或 ^ | 0^0=0 | 0^1=1 | 1^0=1 | 1^1=0 |
取反~ | ~1=0 | ~0=1 |
(左移右移我容易搞混。看箭头方向,箭头朝哪边就是向哪边移)
# 左右 & 右移
# 1. 算数左移:
num<<n 等价于
更容易理解的方式:
1<<1; 表示 1 左移 1 位,也就是 1× 2 = 2;但是注意我们最开始讲好的那句话:
位运算是以二进制位为单位进行的运算,其操作数和运算结果都是整型值。
1 在二进制中表示方法为: 0001 左移 1 位也就是把 1 向左移动一位: 0010 ,十进制表示就是 2,
同理 1<<n,也就是把 0001 中的 1 左移 n 位,学废了吗 (▽)
看懂了,送分题来啦!
表达式 4<<2 的值为 16。
注意运算顺序和数据类型
8.4
表达式 1<<4 的值为 16。
hashMap 为什么不直接写 16,要写 1<<4 呢?可以去了解一下
1
# 2. 算数右移:
num>> n 等价于 ,同上。
若表达式 int right = 2, int left = 7; 那么表达式 left + (right+left) >> 1 的值为 5。
嘿嘿你以为是 6 吧,注意优先级
6
# 3. 无符号右移:
都带了算数两字了,当 num 为正数效果和和算数右移一个效果,忽略符号位;
左移变大,右移变小;
# 关系运算
- 六个关系运算符:
运算符 | 意义 |
---|---|
== | 相等 |
!= | 不相等 |
> | 大于 |
>= | 大于或等于 |
< | 小于 |
<= | 小于或等于 |
- 关系运算结果为
true
或false
- 优先级
- 所有关系运算符的优先级比算术运算低,但比赋值运算高
- 判断是否相等的 == 和!= 优先级比其他的低
- 连续的关系运算是从左到右进行的
- 判断两个浮点数是否相等的方法
Math.abs(f1-f2)<0.0000001 |
- 下列表达式中错误的有?
# 算数运算符
+-×/% 这些没可啥说的
++a 与 a++, 看符号位置,++a 是先对 a 加操作再用,a++ 先用 a 再自增;
注意在运算时:不同数字类型转换:
转换原则:
从低精度向高精度转换 byte 、short、int、long、float、double
低精度到高精度会自动转换,而高精度到低精度则要类型强制转换。
int a = 7; | |
double b = 5.33; | |
b = a; | |
a = (int) b; |
计算机的数据长度:
位:一个二进制数据 0 或 1,是 1bit (位);
字节:存储空间的计量单位,是 1byte = 8bit;如数据库的 VARCHAR 为字节;
# 逻辑运算符
逻辑运算的数据和逻辑运算符的运算结果是 boolean 类型。
❓问题一:& 与 && 有什么区别?
如果不能在两秒钟回答,说明对于你来说这是一个容易忽略的问题。
& 和 | 运算是把逻辑表达式全部计算完,而 && 和 || 运算具有短路计算功能。
对于 & 来说,如果左侧条件为 false,也会计算右侧条件的值,而对于 && 来说,如果左侧的条件为 false,则不计算右侧的条件,这种现象被称作短路现象。(所谓短路计算,是指系统从左至右进行逻辑表达式的计算,一旦出现计算结果已经确定的情况,则计算过程即被终止。)
在程序设计时使用 && 和 || 运算符,不建议使用 & 和 | 运算符。