Java 深入学习(15) —— 位操作符

来源:互联网 发布:怎么在淘宝搜同款 编辑:程序博客网 时间:2024/06/05 07:14

今天在看 JDK 源码中,关于 HashMap 的部分时,再次看到了

这里写图片描述

位运算符,之前因为很少用到,所以一直没有较为深入的了解过 位运算符(基本不懂那些运算符是干啥的),今天打算借着这次机会来稍稍深入的了解一下。

1 按位操作符

按位操作符有以下四种: &按位与、 |按位或、 ^ 按位异或、 ~按位非(按位非是一元操作符)

这里写图片描述

这里写图片描述

输出如下:

int a = 1;int b = 0;int c = 1;-------------------------------------按位 ‘与’(&) 操作符: a & b = 0按位 ‘与’(&) 操作符: a & c = 1-------------------------------------按位 ‘或’(|) 操作符: a | b = 1按位 ‘或’(|) 操作符: b | b = 0-------------------------------------按位 ‘异或’(^) 操作符: a ^ b = 1按位 ‘异或’(^) 操作符: a ^ c = 0-------------------------------------按位 ‘非’(~) 操作符: ~(0) = -1按位 ‘非’(~) 操作符: ~(1) = -2按位 ‘非’(~) 操作符: ~(-1) = 0按位 ‘非’(~) 操作符: ~(-2) = 1-------------------------------------Process finished with exit code 0

2 移位操作符

移位操作符有以下三种:

  • 左移位运算符(<<),能按照操作符右侧指定的位数将操作符左边的操作数向左移动(在低位自动补 0
  • “有符号”右移位操作符(>>),则按照操作符右侧指定的位数将操作符左边的操作数向右移动。“有符号”右移位操作符使用“符号扩展”:若符号为正,则在高位插入 0;若符号为负,则在高位插入 1。
  • “无符号”右移位操作符(>>>),它使用“零扩展”:无论正负,都在高位插入 0

这里写图片描述

如果对 char、byte、short 类型的数值进行移位操作处理,那么在移位进行之前,他们会被转换为 int 类型,并且得到的结果也是一个 int 类型的值。 只有数值的右端的 低5位才有用。这样是为了防止移位超过 int 型值所具有的位数。

“移位”可与“等号”(<<=、>>=、>>>=)组合使用,操作符左边的值会先移动到操作符右边数值指定的位数,再将得到的结果赋给左边的变量。


Reference

1、《Java编程思想》

原创粉丝点击