1.操作符
(1)位
&、|、^、~
操作对象:整数
操作过程:将整数转为二进制,再运算
&:一假皆假
|:一真皆真
^:相同为0,不同为1
~:取反
应用:&:判断整数是否是二次幂数。eg:int a=4;if(a&(a-1)==0){syso("a是二次幂数");}
&:判断奇偶数。eg:int a=5;if(a&1==0){syso("是偶数");}
^:加密。给一个数异或一次是加密,异或两次是解密。
^:判断同异号。a&b>0则为同号,小于0为异号。
(2)位移运算
左位移:<<(乘以2的几次幂)
右位移:>>(除以2的几次幂)
无符号右移:>>>
原理:
正整数
左位移:5<<3:5*2^3(1<<3)
求出5的原码,再去掉前3位数字,再到后面添加3个000
右位移:5>>3:5/2^3
求出5的原码,再去掉后3位数字,再到前面添加3个000
负整数
左位移:-5<<3
求出-5的补码,再去掉前3位数字,再到后面添加3个000
右位移:-5>>3
求出-5的补码,再去掉后3位数字,再到前面添加3个111
无符号位移>>>:+5>>>3
求出5的原码(或-5的补码),再去掉后3位数字,再到前面添加3个000
注意点:在位移运算里,如果移动的位数大于所操作类型的位数,需要对移动的位数%该类型的位数
(3)自增++、自减--
操作对象:变量(不能是具体的值)
原理:a++和++a的区别
相同点:都是对a进行加1
不同点:a++操作的是加1前的值,++a操作的是加1后的值
(4)逻辑运算
&、|、^、~
操作对象:boolean值(true、false)
(5)关系运算
>、<、=、>=、<=、!=
2.类型转换
转换规则:
a、boolean不参与类型转换
b、括号里的类型不会相互转换,只会自动转换成括号外面的类型
(byte short char) int long float double
从左向右为自动转换
从右向左为强制转换。
强制转换的类型会出现内存溢出:eg
int a03=2100000000;
int a04=2100000000;
int result=a03+a04;
System.out.printIn(result);//内存溢出