java中的运算符(&、|、^、3位移、~)

^(异或运算符):将两个数字转换为二进制,对相同位置的数进行比较,如果相同则为0如果不同则为1;
示列:5^25的运算结果为28
运算过程:5的二进制:00101
     25的二进制:11001
       结果的二进制:11100==>转换为10进制就是(2的4次方+2的3次方+2的2次方+0+0)=16+8+4=28;
--------------------------------------------------------------------------------------------------------
&(与运算符):将两个数字转换为二进制,对相同位置的数进行比较,如果都为1则为1,否则为0;
示列:5&25的运算结果为1
运算过程:5的二进制:00101
     25的二进制:11001
       结果的二进制:00001==>转换为10进制就是1;
---------------------------------------------------------------------------------------------------------
|(或运算符):将两个数字转换为二进制,对相同位置的数进行比较,如果有一个为1则为1,否则为0;
示列:5|25的运算结果为1
运算过程:5的二进制:00101
     25的二进制:11001
       结果的二进制:11101==>转换为10进制就是29;

---------------------------------------------------------------------------------------------------------
~(非运算符):将一个数字转换为二进制,如果为1则为0,如果为0则为1(需考虑数字的类型,JAVA默认为int所以有32位);
示列:~25的运算结果为-26
运算过程:25的二进制为:00000000 00000000 00000000 00011001
               结果的二进制为:11111111 11111111 11111111 11100110
又因为int的范围是-2^32到2^32-1(这里的^是次方),其结果超过了int的范围(所以结果为负数,负数的补码是其绝对值的原码取反,末尾再加1(正数当中还有一个0))
因此可以进行以下运算:11111111 11111111 11111111 11100110
                                        00000000 00000000 00000000 00011001
                       加一后==>00000000 00000000 00000000 00011010==>化为十进制就是26==>-26
    补码的原理:11111111 11111111 11111111 11100110
                        -(01111111 11111111 11111111 11111101+1)(算出其超出部分,因为还有一个0,所以正数个数其实有2^32个)
                        -10000000 00000000 00000000 00000000(从范围的最小值开始计算)
                        -----------------------------------------
                         00000000 00000000 00000000 00011010(取反码的原因就是因为原码加上反码和0的个数正好是基本类型范围中数的个数);

---------------------------------------------------------------------------------------------------------
>>(右移运算符):将一个数字转换为二进制后舍弃相应的后几位如果是正数就在前面补0如果是负数就补1;
示列:25>>2的运算结果为6
       运算过程:25的二进制:00000000 00000000 00000000 00011001
舍弃后2位前补0后的二进制:00000000 00000000 00000000 00000110==>转换为十进制就是6;
---------------------------------------------------------------------------------------------------------
<<(左移运算符):将一个数字转换为二进制后舍弃前面几位,在末尾补几个0;
示列:25<<2的运算结果为100
运算过程:25的二进制:00000000 00000000 00000000 00011001
末尾补上2个0的二进制:00000000 00000000 00000000 01100100==>转换为十进制就是100;
---------------------------------------------------------------------------------------------------------
>>>(无符号右移运算符):将一个数字转换为二进制后舍弃后面几位,在前补几个0;
示列:-25>>>2的运算结果为
      运算过程:-25的二进制:11111111 11111111 11111111 11100111(绝对值的原码取反加一)
舍弃后2位前补0后的二进制:00111111 11111111 11111111 11111001==>转换为十进制就是1073741817

注:负数取二进制为绝对值的原码取反加一;二进制取十进制要判断是否为负数,大于2的32次方的为负数,需要将原码减一取反后按照正常二进制运算出十进制结果后加上负号即可

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值