运算符(Operator)
算数运算符、赋值运算符、关系运算符、逻辑运算符、位运算符、条件运算符、Lambda运算符。
位运算符不常用。
| 算术运算符 | +、-、*、/、%、++、-- | |||
|---|---|---|---|---|
| 赋值运算符 | =、+=、-=、*=、/=、%=、<<=、<<=、>>>=、&=、 | =、^= | ||
| 关系运算符 | >、>=、<、<=、==、!=、instanceof | |||
| 逻辑运算符 | &、 | 、^、!、&&、 | ||
| 位运算符 | &、 | 、^、-、<<、>>、>>> | ||
| 条件运算符 | (条件表达式)?结果一!结果二 | |||
| Lambda运算符 | -> |
++或--运算不会改变变量的数据类型。
算术运算符法则与C语言相通。
赋值运算符 法则基本与C语音相通。
1.赋值时如果两边的数据类型不一致,可以采取自动类型转换和强制类型转换原则进行处理。
2.支持连续赋值。
3.+=、-=、*=、/=、%=进行操作不改变数据类型。
byte += 5; //编译通过,byte数据类型不变。
byte =byte+5; //编译不通过,byte数据类型变量运算时应提升为int型,此时应进行强制类型转换。byte = (byte)(byte+5);
因此,为避免手动进行强制类型转换,相同情况下,推荐使用+=、*=等赋值运算符和++、--等算术运算符。
关系运算符 结果均为boolean类型。
-
instanceof类型会在面向对象的多态性中讲解。
-
关系运算符适用于除boolean之外的基本数据类型关系运算。(==和!=除外)
-
==、!=适用于引用数据类型。
逻辑运算符
&与&& 和;且
|与|| 或
! 非;否
^ 异或;符号两边异为true 同为false
Java中,逻辑运算符可以用于连接布尔型表达式 如a<3<b无法成立,应当写为a<3&b>3;
1.连接boolean类型变量的表达式
2.运算结果也是boolean类型
3.常用于逻辑循环和if-else结构。
&与&&的辨析:
(表达式1)&(表达式2)
若1为false--->继续执行表达式2
(表达式1)&&(表达式2)
若1为false--->不执行表达式2(短路现象)
推荐使用&&符号。
|与||同理。
若1为true,则在||运算中出现短路现象。
(C语音基础有介绍过。)
位运算符
<<左移 //数值a左移n位,a*=2进行n次。(正负数都适用)
右移 //由左移可类推,右移为b/=2进行n次。(正负数都适用)需向下取整。
无符号右移 //往右移动后,左边空出的位置直接补0。
&与运算
|或运算
^异或运算
~取反运算
&、|、^需要与关系运算符区分。
关系运算符中&、|、^左右为boolean类型表达式。
位运算符中&、|、^左右为数值。
①位运算符针对数值类型的变量或者常量进行运算,结果仍然为数值类型。
②左移的位数有限制,最多28位。
交换a与b的值
方式1 中间变量
int temp=a;
m = n;
n = temp;
方式2 节省内存空间,但适用性差。
m = m+n;
n = m-n;
m =m-n;
方式3 节省内存空间,但适用性差。
m =m^n;
n m^n; //(m^n)^n--->m
m=m^n;
条件运算符(三元运算符)
(条件表达式)?(表达式1):(表达式2)
真1假2.
1.表达式1和表达式2应为相同类型或可兼容的类型。
2.开发中,凡是可以用条件运算符的运算,均可以用if-else改写。
反之无法成立。
3.都成立的情况下,条件运算符的效率稍高。
补充: 二进制
二进制:满二进一,以0b或0B开头。
正数的补码、反码、原码都相同。
负数的原码:十进制转二进制,最高位设为1。
反码:原码最高位(符号位)不变,其余位相反。
补码:反码+1
计算机存储以二进制补码形式储存。
二进制转八进制:三个二进制数为一组。
二进制转十六进制:四个二进制数为一组。