Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)

package com.zf.binary;  
  
  
public class Test1 {  
  
    public static void main(String[] args) {  
          
        /* 符号为:最高位同时表示图号,0为正数,1为负数 */  
          
        /*  
            1、二进制转换为十进制 
 
            二进制转换为10进制的规律为: 每位的值 * 2的(当前位-1次方) 
            例如: 
                00000001 = 0 * 2^7 + 0 * 2^6 + 0 * 2^5 + 0 * 2^4 + 0 * 2^3 + 0 * 2^2 + 0 * 2^1 + 1 * 2^0  = 1 
                00000010 = 0 * 2^7 + 0 * 2^6 + 0 * 2^5 + 0 * 2^4 + 0 * 2^3 + 0 * 2^2 + 1 * 2^1 + 0 * 2^0  = 2 
                 
            2、二进制的符号位: 
                最高位表示符号位,0表示正数  , 1表示负数 
                 
             
            3、将二进制负数转换为十进制:先对该二进制数取反,然后加1,再转换为十进制,然后在前面加上负号 
                例如: 10101011 最高位为1,所以为负数 
                   第一步:取反: 01010100 
                   第二步:加1 : 01010101 
                   第三步:转换为10进制:85 
                   第四步:加上负号: -85 
                   所以      10101011 转换为十进制为 -85 
                    
            4、将十进制负数转换为二进制:先得到该十进制负数的绝对值,然后转换为二进制,然后将该二进制取反,然后加1 
                例如:-85 
                第一步:得到绝对值 85 
                第二步:转换为二进制:01010101 
                第二步:取反:                10101010 
                第三步:加1:                 10101011 
                所以,-85转换为二进制为  10101011 
         */  
          
        /* 
        ~ ‘非’ 运算符是将目标数的进制去反,即0变成1 ,1变成0 
        2的二进制码为 00000010 , 它取反为11111101 ,可见取反后结果为负数(二进制负数转换为十进制的步骤为:将二进制去反,然后+1) 
         将 11111101 转换为10进制 ,第一步去反 得到 00000010 然后 加1 得到 00000011 ,得到的结果为3 ,然后在前面加上负号就可以了 
         所以结果为-3 
         */  
        System.out.println(~2);  
          
        /* 
          ^ 异或 ,计算方式为:两个二进制数的位相同则为0 不同则为1 
          23转换为二进制为:00010111 
          12转换为二进制为:00001100 
                    计算结果为:00011011  =  27 
         */  
        System.out.println(23 ^ 12);   
          
        /* 
         & 按位与 ,计算方式为:两个二进制数的位都为1则为1 ,否则为0 
         1的二进制为 :00000001 
         2的二进制为 :00000010 
              结果为 :00000000 = 0  
         */  
        System.out.println(1&2);  
          
        /* 
          | 按位或 ,计算方式为:两个二进制位有一个为1就为1,否者为0 
          5 的二进制为:00000101 
          6 的二进制为:00000110 
                  结果为:00000111 = 7 
         */  
        System.out.println( 5 | 6);  
          
          
        /* 
          >>:带符号右移。正数右移高位补0,负数右移高位补1。比如:
          4 >> 1,结果是2;-4 >> 1,结果是-2。-2 >> 1,结果是-1。
          >>>:无符号右移。无论是正数还是负数,高位通通补0。
          对于正数而言,>>和>>>没区别。
          对于负数而言,-2 >>> 1,结果是2147483647(Integer.MAX_VALUE),-1 >>> 1,结果是2147483647(Integer.MAX_VALUE)。
          3 的二进制为:00000011 
                向右移动1位:00000001 = 1  
         */  
        System.out.println(3 >> 1);  
          
          
    }  
  
}  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值