java 定义运算符_java运算符详解

java运算符:

定义:用来指明对于操作数的运算方式

按照操作数数目分类:

单目运算    数目运算    三目运算

a++              a+b           (a>b) ? x:y

按照运算符功能分类:

算术运算符:

+    -    *    /    %(取余/取模)

++ 自增

--  自减

注:int x = 1; int y = x++ 将x变量空间的内容先取出,然后将常量区的1取出x在像做

值交换的时候会产生一个临时的副本空间,++(--)在变量前面则先自增后备份,++(--)在

变量后面则先备份后自增,=号是将备份空间中的值赋值给别人

例:

int m =1;

int n =2;

int sum = m++ + ++n - n-- - --m +  n-- - --m ;

System.out.println("m="+m+", n="+n+", sum="+sum);

m =0 n =1 sum = 2

赋值运算符:

= 赋值号

+=  int x=1 x+=10 ; 相当于 x = x+10   // 11

-=  int x=10 x-=10 ; 相当于 x = x-10   // 0

*=  int x=10 x*=10 ; 相当于 x = x*10  // 100

/=  int x=10 x-=10 ; 相当于 x = x/10   // 1

%=  int x=10 x%=10 ; 相当于 x = x%10 // 0

注:

byte a = 1;

a +=1; //2

a = a+1;//编译报错

a = (byte)(a+2) // 强制转换,通过

讲解:计算机中+=相当于一个运算符,会先用+符号自动的将byte提升为32bit的int类型

来进行计算,然后在通过=运算符将32bit位的int类型自动降为8bit的数据来存入a

中,但是a=a+1中的=和+属于两个运算符,+将byte中的1提升为32bit来个常量池

中的1进行相加,但是=赋值时在将32bit位的数据赋值到8bit位中的a空间中,会出

现编译报错

总结:

单个运算符后台编译可以自动提升或者降低bit位来满足赋值或者计算,但是赋值

号之后不能自动降级方程式,需要强制转换

位运算符:

&按位与 | 按位或 ^ 按位异或 ~ 按位取反

<>按位右位移   >>>按位又位移(无符号)

例: 3 & 5 = ?    3 | 5 = ?    3 ^ 5 = ?    ~ 6 = ?

解:  将3 和 5分别换算成二进制

3 = 00000000  00000000  00000000  00000011 = 011

5 = 00000000  00000000  00000000  00000101 = 101

所以按位&即将011和101进行按位&后在化成10进制(true 为 1 false 为 0)

0  1  1

1  0  1

0  0  1  = 1

所以按位 | 即将011和101进行按位 | 后在化成10进制(true 为 1 false 为 0)

0  1  1

1  0  1

1  1  1  = 7

所以按位 ^ 即将011和101进行按位^后在化成10进制(true 为 1 false 为 0)

0  1  1

1  0  1

1  1  0  = 6

所以按位  即将101进行按位 ~ 后在化成10进制(true 为 1 false 为 0)

~6 = -7

解释:计算机将0划分在正数行列,所以 -10  -2 1  -32 故 -76

6  (正数三码相同)

00000000 00000000 00000000 0110  (原码)

00000000 00000000 00000000 0110  (反码)

00000000 00000000 00000000 0110  (补码)

-6  (负数三码不同)

10000000 00000000 00000000 00000110  (原码)

11111111 11111111 11111111 11111001  (反码:保持符号不动其余取反)

11111111 11111111 11111111 11111010  (补码:在反码基础上+1)

计算机中不管是整数还是负数,存储的形式都是以补码形式来存储

注:反码是一种表示形式 取反是一个计算过程

<

6<<1=?

00000110 = 00001100 = 12

所以往左移相当于*2的位移次幂

6>>1=?

00000110 = 00000011 = 3

所以往左移相当于/2的位移次幂

负数

-6 >>>1

11111111    11111111    11111111    11111010(以补码计算)

?1111111    11111111    11111111    11111101

注: >> 保留符号位1填1

>>> 不保留符号 不管是什么都填0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值