六种运算符的基础使用

50 阅读3分钟

运算符(Operator)

算数运算符、赋值运算符、关系运算符、逻辑运算符、位运算符、条件运算符、Lambda运算符。

位运算符不常用。

算术运算符+、-、*、/、%、++、--
赋值运算符=、+=、-=、*=、/=、%=、<<=、<<=、>>>=、&=、=、^=
关系运算符>、>=、<、<=、==、!=、instanceof
逻辑运算符&、、^、!、&&、
位运算符&、、^、-、<<、>>、>>>
条件运算符(条件表达式)?结果一!结果二
Lambda运算符->

 

++或--运算不会改变变量的数据类型。

算术运算符法则与C语言相通。

 

赋值运算符 法则基本与C语音相通。

1.赋值时如果两边的数据类型不一致,可以采取自动类型转换和强制类型转换原则进行处理。

2.支持连续赋值。

3.+=、-=、*=、/=、%=进行操作不改变数据类型。

byte += 5;              //编译通过,byte数据类型不变。

byte =byte+5;           //编译不通过,byte数据类型变量运算时应提升为int型,此时应进行强制类型转换。byte = (byte)(byte+5);

因此,为避免手动进行强制类型转换,相同情况下,推荐使用+=、*=等赋值运算符和++、--等算术运算符。

 

关系运算符 结果均为boolean类型。

  1.  instanceof类型会在面向对象的多态性中讲解。

  2.  关系运算符适用于除boolean之外的基本数据类型关系运算。(==和!=除外)

  3.  ==、!=适用于引用数据类型

 

逻辑运算符

&与&& 和;且

|与||  或

!  非;否

^  异或;符号两边异为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

计算机存储以二进制补码形式储存。

 

二进制转八进制:三个二进制数为一组。

二进制转十六进制:四个二进制数为一组。