java 运算符

来源:互联网 发布:网络高级工程师认证 编辑:程序博客网 时间:2024/06/05 19:46

java 运算符&(与)、|(或)、~(非)、^(异或)、<<(左移)、>>(右移)、>>>(无符号右移)

^ 异或:

异或运算(^)都以二进制数据为基础进行的运算。也就是说当代码中使用到异或运算时,都会先将两个条件进行转换,转换成二进制数据后,再进行运算。异域中同位如果值相同(都是0或者都是1)则为0,不同(一个是0,一个是1)为1。int a=4;int b=6;int c = a^b;//c的值是a和b的异或。值为2.运算过程:a转换为二进制:0100b转换为二进制:01100100^0110=00100010转换为10进制:2所以,c的值为2在学校的时候,我们曾用^给两个变量交换值(在不适用第三方变量的情况下).int a = 4;int b = 6;a = a ^ b;b = a ^ b;a = a ^ b;输出结果:a = 6;b = 4;

<<(左移)和>>(右移)运算法则相同, 这里用<<举例

t i = 1;int i1 = i << 1; 相当于(i*21次方)int i2 = i << 2; 相当于(i*22次方)int i3 = i << 3; 相当于(i*23次方)System.out.println(i1);System.out.println(i2);System.out.println(i3);输出的结果2  48运算过程:i1: 先将i转为二进制0001;0001向左移动一位不够的用0补,结果0010;0010转为十进制等于2;i1: 先将i转为二进制0001;0001向左移动两位不够的用0补,结果0100;0100转为十进制等于4;i1: 先将i转为二进制0001;0001向左移动三位不够的用0补,结果1000;1000转为十进制等于8;总结:左移相当于i*2的n次方;i << 1; 相当于(i*21次方)右移相当于i/2的n次方;i >> 1; 相当于(i/21次方)

无符号右移

只对于32位和64位才有意义。因为java中的int型占用4个字节,也就是32个二进制位。对于移位运算如果你移动了32位,那么所有的位都移出了,就没什么意义了,所以系统会先将移动的位数对32取模。
原创粉丝点击