以下为 Jean 学习笔记和习题整理,供学习和参考

# 运算符

# 位运算符

位运算是以二进制位为单位进行的运算,其操作数和运算结果都是整型值。
位运算符:
与 &0&0=00&1=01&0=01&1=1
或 |0\0=00\1=11\0=11\1=1
异或 ^0^0=00^1=11^0=11^1=0
取反~~1=0~0=1

(左移右移我容易搞混。看箭头方向,箭头朝哪边就是向哪边移)

# 左右 & 右移

# 1. 算数左移:

num<<n 等价于 num×2nnum × 2^n

更容易理解的方式:

​ 1<<1; 表示 1 左移 1 位,也就是 1× 2 = 2;但是注意我们最开始讲好的那句话:

位运算是以二进制位为单位进行的运算,其操作数和运算结果都是整型值。

1 在二进制中表示方法为: 0001 左移 1 位也就是把 1 向左移动一位: 0010 ,十进制表示就是 2,

同理 1<<n,也就是把 0001 中的 1 左移 n 位,学废了吗 ()

看懂了,送分题来啦!

  1. 表达式 4<<2 的值为 16

    注意运算顺序和数据类型

    8.4

  2. 表达式 1<<4 的值为 16

    hashMap 为什么不直接写 16,要写 1<<4 呢?可以去了解一下

    1

# 2. 算数右移:

num>> n 等价于 num2n\dfrac {num }{2^n} ,同上。

  1. 若表达式 int right = 2, int left = 7; 那么表达式 left + (right+left) >> 1 的值为 5

    嘿嘿你以为是 6 吧,注意优先级

    6

# 3. 无符号右移:

都带了算数两字了,当 num 为正数效果和和算数右移一个效果,忽略符号位;

左移变大,右移变小;

# 关系运算

  • 六个关系运算符:
运算符意义
==相等
!=不相等
>大于
>=大于或等于
<小于
<=小于或等于
  • 关系运算结果为 truefalse
  • 优先级
    • 所有关系运算符的优先级比算术运算低,但比赋值运算高
    • 判断是否相等的 == 和!= 优先级比其他的低
    • 连续的关系运算是从左到右进行的
  • 判断两个浮点数是否相等的方法
Math.abs(f1-f2)<0.0000001
  • 下列表达式中错误的有?

# 算数运算符

+-×/% 这些没可啥说的

++aa++, 看符号位置,++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,则不计算右侧的条件,这种现象被称作短路现象。(所谓短路计算,是指系统从左至右进行逻辑表达式的计算,一旦出现计算结果已经确定的情况,则计算过程即被终止。)

在程序设计时使用 && 和 || 运算符,不建议使用 & 和 | 运算符。

更新于

请我喝[茶]~( ̄▽ ̄)~*

Jean 微信支付

微信支付

Jean 支付宝

支付宝

Jean 贝宝

贝宝