JAVA位运算等运算符总结
JAVA位运算等运算符总结
一、概述
运算符是一种“功能”符号,用以通知 Java 进行相关的运算。
Java 语言中常用的运算符可分为如下几种:
- 算术运算符
- 赋值运算符
- 比较运算符
- 逻辑运算符
- 条件运算符
- 位运算符
二、算数运算符
就是加减乘除这些,没什么可说的。
+ - * / % ++ --
加 减 乘 除 取余 自增 自减
三、赋值运算符
就是把右边的值运算之后赋值给左边,没什么可说的。
= 右边值给左边
+= 左右相加给左边
-= 左右相减给左边
*= 左右相乘给左边
/= 左右相除给左边
%= 左右取余余数给左边
<<= 左边数据左移位赋值给左边
>>= 左边数据右移位赋值给左边
&= 按位与赋值运算符
^= 按位异或赋值操作符
|= 按位或赋值操作符
四、比较运算符
就是判断两个数据的大小,没什么可说的。
== 判断是否相等
!= 判断是否不等
> 判断是否大于
< 判断是否小于
>= 判断是否大于等于
<= 判断是否小于等于
五、逻辑运算符
就是操作两个boolean类型,还是有点可说的。
&& 短路与 (符号两边左边为假,就是假,右边可能会被短路。两边都是真则为真)
|| 短路或 (符号两边任何一个为真,就是真,右边可能会被短路。两边都是假则为假)
& 逻辑与 (符号两边都是真则为真,其余为假,和短路与意义一样,但是右边肯定会执行,执行完合并判断)
| 逻辑或 (符号两边任何一个为真,就是真,和短路或意义一样,但是右边肯定会执行,执行完合并判断)
! 逻辑非 (用来反转操作数的逻辑状态)
^ 逻辑异或 (符号两边结果相同为假,不同则为真)
可以将boolean的true和false看作是1和0,这样&和|的意义就是按位与和按位或。
六、条件运算符
就是? : 也称为 “三元运算符”,没什么可说的。
语法形式:布尔表达式 ? 表达式1 :表达式2
2 > 1 ? 2 : 1
结果是2
冒号前面的放true的逻辑,后面放false的逻辑。
七、位运算符
位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。作用在所有的位上,并且按位运算
& 与,如果相对应位都是1,则结果为1,否则为0
| 或,如果相对应位都是 0,则结果为 0,否则为 1
^ 异或,如果相对应位值相同,则结果为0,否则为1
〜 取反,按位取反运算符翻转操作数的每一位,即0变成1,1变成0。
<< 按位左移运算符。左操作数按位左移右操作数指定的位数。
>> 按位右移运算符。左操作数按位右移右操作数指定的位数。
>>> 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。
按位操作,首先要知道不同类型字节长度,网上都是显示一个字节8位,不是每个数字都是8位的。但你可以将计算过程以8位来算。
不同类型长度如下:
类型 |
字节 |
位 |
长度 |
范围(可以在源码里查看) |
---|---|---|---|---|
byte |
1 byte |
8 bit |
2^8 |
-2^7, 2^7-1 |
char |
2 byte |
16 bit |
2^16 |
u0000~uFFFF |
int |
4 byte |
32 bit |
2^32 |
-2^31, 2^31-1 |
short |
2 byte |
16 bit |
2^16 |
-2^15, 2^15-1 |
long |
8 byte |
64 bit |
2^64 |
-2^63, 2^63-1 |
double |
8 byte |
64 bit |
2^64 |
4.9e-324, 1.7976931348623157e+308 |
float |
4 byte |
32 bit |
2^32 |
1.4e-45f, 3.4028235e+38f |
做位操作,还要明白什么是原码,反码,补码。
- 正数的原码,反码,补码都一样;
- 负数的反码是对除了符号位(最高位)对原码取反,补码是对反码+1,负数原码和正数原码除最高位不一样其他位一样。
计算机计算是用的补码
负数以补码看原码,先减1看反码,再反转看原码。
以int整型32位,带负数为例子(正数的太简单了,略过):
按位与&(补码):
数字1:00000000000000000000000000000001
数字-128:11111111111111111111111110000000
&结果:00000000000000000000000000000000
1 & -128 = 0
数字-1:11111111111111111111111111111111
数字-128:11111111111111111111111110000000
&结果:11111111111111111111111110000000
-1 & -128 = -128
按位或|(补码):
数字1:00000000000000000000000000000001
数字-128:11111111111111111111111110000000
|结果:11111111111111111111111110000001
1 | -128 = -127
数字-1:11111111111111111111111111111111
数字-128:11111111111111111111111110000000
|结果:11111111111111111111111111111111
-1 | -128 = -1
按位异或^(补码):
数字1:00000000000000000000000000000001
数字-128:11111111111111111111111110000000
^结果:11111111111111111111111110000001
1 ^ -128 = -127
数字-1:11111111111111111111111111111111
数字-128:11111111111111111111111110000000
^结果:00000000000000000000000001111111
-1 ^ -128 = 127
按位取反〜(补码):
数字1:00000000000000000000000000000001
〜结果:11111111111111111111111111111110
~1 = -2
数字-128:11111111111111111111111110000000
〜结果:00000000000000000000000001111111
~-128 = 127
按位左移<<(补码):
数字1:00000000000000000000000000000001
左移4位(<<4)结果:00000000000000000000000000010000
1 << 4 = 16
数字-128:11111111111111111111111110000000
左移4位(<<4)结果:11111111111111111111100000000000
-128 << 4 = -2048
按位右移>>(补码):
数字1:00000000000000000000000000000001
右移4位(>>4)结果:00000000000000000000000000000000
1 >> 4 = 0
数字-128:11111111111111111111111110000000
右移4位(>>4)结果:11111111111111111111111111111000
-128 >> 4 = -8
无符号右移>>>(补码):
数字1:00000000000000000000000000000001
右移4位(>>>4)结果:00000000000000000000000000000000
1 >>> 4 = 0
数字-128:11111111111111111111111110000000
右移4位(>>>4)结果:00001111111111111111111111111000
-128 >>> 4 = 268435448
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- C#: "$"作用和用法
- SAP ABAP字符和字符串变量隐式转换的一些规则
- MySQL information_schema详解 COLLATION_CHARACTER_SET_APPLICABILITY
- 如何处理Angular项目在Visual Studio Code打开报关于@Decorators的警告信息
- QT 中普通数值与字符串之间的转换
- C# 时间与时间戳互转 13位
- 在C#中ref和out具体怎么使用?在什么情况下使用?
- Vs code 创建vue模版
- [892]python中re.split()方法
- MacOS抓包工具Charles
- PYTHON替代MATLAB在线性代数学习中的应用(使用Python辅助MIT 18.06 Linear Algebra学习)
- C# TCP/IP 文件(图片、视频等)收发系统
- 反制面试官 | 14张原理图 | 再也不怕被问 volatile!
- Javascript之其实我觉得原型链没有难的那么夸张!
- 归纳一下:C#线程同步的几种方法